PDA

View Full Version : سوال: ارسال اطلاعات یک فیلد از یک جدول به جدول دیگر؟



morteza_1234m
جمعه 20 فروردین 1389, 23:14 عصر
سلام اساتید محترم
من می خوام که اطلاعات یک فیلد از جدول که از نوع image هست رو در جدول دیگر با همان نوع بریزم
جدول اول تمپ هست و جدول دوم اصل کاری و هر وقت کاربر اجازه داد اطلاعات از جدول تمپ به جدول اصل کاری ریخته میشه(با اینجا هاش مشکلی ندارم فقط محض اطلاع گفتم)
باید چه دستوراتی بنویسم؟

با تشکر

Rejnev
جمعه 20 فروردین 1389, 23:19 عصر
سلام
این کار میکنه؟



insert into main(ImageField)
(
select ImageField from temp [where ...]
)

morteza_1234m
شنبه 21 فروردین 1389, 00:00 صبح
نمی تونی بیشتر روش توضیح بدی
من دقیقا باید این کد رو چه جوری استفاده کنم
چیزی که تو ذهن من بود و انجامش میدم و جواب نمیده اینه که ابتدا یک رشته اتصال تعریف می کنم
سپس توسط sqldataadapter دستور select ای اجرا می کنم و درون dataset میریزم سپس توسط sqlcommand دستورات insert رو اجرا می کنم
کدی که من براش نوشتم اینه

string strcon = "Data Source=.;Initial Catalog=Bank;Integrated Security=True";
SqlConnection con = new SqlConnection(strcon);
con.Open();
SqlDataAdapter sqladapter = new SqlDataAdapter("select PicBinary from TempPic1", con);
DataSet ds = new DataSet();
sqladapter.Fill(ds, "TempPic1");
SqlCommand sqlCmd = new SqlCommand("Insert-Customer-Current", con);
sqlCmd.CommandType = CommandType.StoredProcedure;
sqlCmd.Parameters.AddWithValue("@ShAccount", txtShAccount.Text);
sqlCmd.Parameters.AddWithValue("@ShMeli", txtMelliCode.Text);
sqlCmd.Parameters.AddWithValue("@RegisterDate", PersianDateTextBox1.DateValue).DbType = DbType.DateTime;
sqlCmd.Parameters.AddWithValue("@AccountStore", txtAccountStore.Text).DbType = DbType.Currency;
sqlCmd.Parameters.AddWithValue("@Singature", ds.Tables[0]);
sqlCmd.ExecuteNonQuery();
con.Close();

stored procdure

USE [Bank]
GO
/****** Object: StoredProcedure [dbo].[Insert-Customer-Current] Script Date: 04/10/2010 00:25:40 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author: <Author,,Name>
-- Create date: <Create Date,,>
-- Description: <Description,,>
-- =============================================
ALTER PROCEDURE [dbo].[Insert-Customer-Current]
-- Add the parameters for the stored procedure here
@ShMeli Nvarchar(50),
@ShAccount Nvarchar(50),
@RegisterDate Datetime,
@AccountStore Money,
@Singature Image
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;

-- Insert statements for procedure here
Insert into [Customer-current]([Sh-Meli],[Sh-Account],[Account-Store],Register_Date,Signature)
Values(@ShMeli,@ShAccount,@AccountStore,@RegisterD ate,@Singature)

END

ساختار جدول
http://barnamenevis.org/forum/attachment.php?attachmentid=46810&stc=1&d=1270843126

واین ارور میده
http://barnamenevis.org/forum/attachment.php?attachmentid=46810&stc=1&d=1270843218

Rejnev
شنبه 21 فروردین 1389, 00:46 صبح
توی دستور


sqlCmd.Parameters.AddWithValue("@Singature", ds.Tables[0]);
شما دارید یک جدول رو که معلوم نیست چند رکورد داره رو (C#‎‎ نمیدونه) توی یک پارام میریزید، که باید نوعش داده باشه و نه یک کلاس از نوع Datatable.
این رو امتحان کنید:


sqlCmd.Parameters.AddWithValue("@Singature", ds.Tables[0].Rows[0][0]);
اولین مقداری که در اولین جدول و اولین ردیف و ستون جدول داخل دیتاست هست رو میریزه توی پارامتر امضا و بعد میفرسته به sql.
میتونید هم این کار رو در سمت Sql انجام بدید تا حجم اطلاعاتی که جابجا میشه کم و سرعت کار بالا بیاد
. به این نحو که شما هنگام درج، عکس رو نه میخونید و نه ذخیره میکنید.
فقط بعد از ذخیره شدن اطلاعات شما یک sp رو با پارامتر مثلا شماره حساب فراخوانی میکنید. این sp میاد و بر اساس شماره حساب، در جدول موقتی جستجو کرده و به جدول اصلی اضافه میکنه.
فراخونی میتونه از همون sp ای که نوشتید هم انجام بشه.



alter PROCEDURE [dbo].[Insert-Customer-Current]...
begin ...


exec SaveSignature @ShAccount

end
.
.
.
-- Content of SaveSignature is like:
proc SaveSignature @ShAccount nvarchar()
begin

insert into Customer-current(Signature)
(
select Signature from temp where AccountNO=@ShAccount
)


end


که اگه جدول موقت تنها یک رکورد داشته باشه نیازی نیست که شرط بذارید.