PDA

View Full Version : dataset



Ali2200
سه شنبه 30 مرداد 1386, 11:26 صبح
اگه بخام اطلاعات داخل یک datagrid که توسط کاربر وارد شده را داخل یک dataset بریزم و بعد داخل databaseدر sqlserver چه کدی را باید بنویسم؟
متشکرم

sm_ezadpanah
سه شنبه 30 مرداد 1386, 11:32 صبح
با سلام
منظورتون اینه که می خوای یک گروه از رکورد رو تو بانکت درج کنی؟؟؟

PC2st
سه شنبه 30 مرداد 1386, 11:51 صبح
اگه بخام اطلاعات داخل یک datagrid که توسط کاربر وارد شده را داخل یک dataset بریزم
این داده ها بطور مستقیم درون دیتاست ریخته میشه...


بعد داخل databaseدر sqlserver چه کدی را باید بنویسم؟
اگر بخواهید داخل database کدی برای این منظور بنویسید باید از پروسیجرهای ذخیره شده استفاده کنید...
اما اگر میخواید کدش رو در برنامتون بنویسید، به لینک زیر یک نگاه بندازید:
http://barnamenevis.org/forum/showthread.php?t=76542
کدهای نوشته شده در اون لینک برای MS Access هست، اگر بخواید اون رو برای SQL Server استفاده کنید، باید:
- Connection String رو تغییر بدید.
- برای نوشتن دستورات InserCommand و یا DeleteCommand نمیشه از علامت سوال "?" استفاده کرد، بجاش باید نام پارامتر رو ذکر کنید مثلا بجای کد زیر:


myDataAdapter.DeleteCommand = new OleDbCommand("DELETE FROM MainLog WHERE [LastName] = ?", myConnection);
myDataAdapter.DeleteCommand.Parameters.Add("LastName", OleDbType.Integer).SourceColumn = "LastName";

کد زیر باید نوشته بشه (قسمت متفاوت بصورت پر رنگ و با رنگ قرمز مشخص شده):


myDataAdapter.DeleteCommand = new OleDbCommand("DELETE FROM MainLog WHERE LastName = @LastName", myConnection);
myDataAdapter.DeleteCommand.Parameters.Add("@LastName", OleDbType.Integer).SourceColumn = "LastName";

sm_ezadpanah
سه شنبه 30 مرداد 1386, 13:28 عصر
پیشوند oledb رو هم تبدیل به sql کنید

Ali2200
سه شنبه 30 مرداد 1386, 14:28 عصر
ممنون لینکی که دادی خیلی مفید بود می شه این قسمتشو برام با sql بنویسی? متشکرم

کد:
myDataAdapter.InsertCommand = new OleDbCommand("INSERT INTO MainLog (FirstName, LastName, Moadel) VALUES (?, ?, ?)", myConnection);myDataAdapter.InsertCommand.Paramete rs.Add("FirstName", OleDbType.BSTR).SourceColumn = "FirstName";myDataAdapter.InsertCommand.Parameters.Add("LastName", OleDbType.BSTR).SourceColumn = "LastName";myDataAdapter.InsertCommand.Parameters.Add("Moadel", OleDbType.Single).SourceColumn = "Moadel";myDataAdapter.Update(ds, "AnyTable");

Ali2200
سه شنبه 30 مرداد 1386, 14:30 عصر
و به جای lastname چی بذارم؟

PC2st
سه شنبه 30 مرداد 1386, 14:46 عصر
myDataAdapter.InsertCommand = new OleDbCommand("INSERT INTO MainLog (FirstName, LastName, Moadel) VALUES (@FirstName, @LastName, @Moadel)", myConnection);
myDataAdapter.InsertCommand.Parameters.Add("@FirstName", OleDbType.BSTR).SourceColumn = "FirstName";
myDataAdapter.InsertCommand.Parameters.Add("@LastName", OleDbType.BSTR).SourceColumn = "LastName";
myDataAdapter.InsertCommand.Parameters.Add("@Moadel", OleDbType.Single).SourceColumn = "Moadel";
myDataAdapter.Update(ds, "AnyTable");

LastName همون نام خانوادگی و FirstName نام کوچک و Moadel هم که همون معدله...
من کدهای فوق رو برای جدولی بنام MainLog نوشتم که سه تا فیلد FirstName و lastName و Moadel در اون وجود داره.

خاصیت SourceColumn یک خاصیت از Parameters است که باید نام یک ستون از data set رو براش معرفی کنیم، تا در حین آپدیت کردن از اونها استفاده کنه.



و به جای lastname چی بذارم؟
فیلدی که نام خانوادگی رو مشخص میکنه.

Ali2200
سه شنبه 30 مرداد 1386, 16:47 عصر
من این رو برای sql می نویسم error میده می شه sql رو برام بنویسی؟

MH2538
سه شنبه 30 مرداد 1386, 17:27 عصر
سلام
اگر این هم errorداد پیغام خطا رو بنویس


SqlCommandBuilder mycb = new SqlCommandBuilder(myDataAdapter);
myDataAdapter.InsertCommand = new SqlCommand("INSERT INTO MainLog (FirstName, LastName, Moadel) VALUES (@FirstName, @LastName, @Moadel)", myConnection);
myDataAdapter.InsertCommand.Parameters.Add("@FirstName", SqlDbType.NVarChar).SourceColumn = "FirstName";
myDataAdapter.InsertCommand.Parameters.Add("@LastName", SqlDbType.NVarChar).SourceColumn = "LastName";
myDataAdapter.InsertCommand.Parameters.Add("@Moadel", SqlDbType.SmallInt).SourceColumn = "Moadel";
myDataAdapter.Update(ds, "AnyTable");

PC2st
سه شنبه 30 مرداد 1386, 17:56 عصر
من این رو برای sql می نویسم error میده می شه sql رو برام بنویسی؟
چه اروری میده و متن ارورش چیه؟ اگر تونستید اون قسمت از کد رو هم بگذارید.

Ali2200
چهارشنبه 31 مرداد 1386, 10:36 صبح
SqlConnection cn = newSqlConnection();
cn.ConnectionString = "Server=.;DataBase=personel;UID=sa";
SqlCommand cmd = newSqlCommand();
cmd.Connection = cn;
SqlDataAdapter da = newSqlDataAdapter(cmd);
DataSet ds = newDataSet();
SqlDataReader dr;
da.Fill(ds, "entry_body");//************************
dataGridView1.DataSource = ds;
dataGridView1.DataMember = "entry_body";

SqlCommandBuilder mycb = newSqlCommandBuilder(da);
da.InsertCommand = newSqlCommand("INSERT INTO entry_body (code) VALUES (@code)", cn);
da.InsertCommand.Parameters.Add("@code", SqlDbType.NVarChar).SourceColumn = "code";



da.Update(ds, "entry_body");




این کدی است که نوشتم خطی که مشخص کردم این ارور را می دهد
ExecuteReader: CommandText property has not been initialized

MH2538
چهارشنبه 31 مرداد 1386, 10:42 صبح
سلام
شما برای cmd هیچ دستوری در ارتباط با دیتابیس ننوشتی
تغییرش دادم


SqlConnection cn = new SqlConnection();
cn.ConnectionString = "Server=.;DataBase=personel;UID=sa";
SqlCommand cmd = new SqlCommand();
cmd.CommandText = "Select * From tusers"
cmd.Connection = cn;
SqlDataAdapter da = new SqlDataAdapter(cmd);
DataSet ds = new DataSet();
SqlDataReader dr;
da.Fill(ds, "entry_body");//************************
dataGridView1.DataSource = ds;
dataGridView1.DataMember = "entry_body";

Ali2200
چهارشنبه 31 مرداد 1386, 10:58 صبح
SqlConnection cn = newSqlConnection();
cn.ConnectionString = "Server=.;DataBase=anbar;UID=sa";
SqlCommand cmd = newSqlCommand();
cmd.Connection = cn;
SqlDataAdapter da = newSqlDataAdapter(cmd);
DataSet ds = newDataSet();
SqlDataReader dr;
SqlCommandBuilder mycb = newSqlCommandBuilder(da);
da.InsertCommand = newSqlCommand("INSERT INTO entry_body (code) VALUES (@code)", cn);
da.InsertCommand.Parameters.Add("@code", SqlDbType.NVarChar).SourceColumn = "code";
da.Fill(ds, "entry_body");
dataGridView1.DataSource = ds;
dataGridView1.DataMember = "entry_body";


خطی که مشخص کردم این ارور میده

ExecuteReader: CommandText property has not been initialized

Ali2200
چهارشنبه 31 مرداد 1386, 11:16 صبح
من می خواستم اطلاعات گرید وارد پایگاهم کنم ولی این برعکس عمل می کنه.

PC2st
چهارشنبه 31 مرداد 1386, 11:53 صبح
همانطور که MH2538 گفتند باید یک دستور SQL مشخص بشه قبل از اینکه از متد Fill استفاده کنیم. متد Fill در شیئ cmd جستجو میکنه و میبینه که چه دستور SELECT ای براش مشخص شده و بر اساس آن دستور، شیئ ds رو پر میکنه. پس قبلش باید دستور رو مشخص کنید:


//در این خطوط مشکلی نیست
SqlConnection cn = new SqlConnection();
cn.ConnectionString = "Server=.;DataBase=anbar;UID=sa";
SqlCommand cmd = new SqlCommand();
cmd.Connection = cn;
SqlDataAdapter da = new SqlDataAdapter(cmd);
DataSet ds = new DataSet();
SqlDataReader dr;
SqlCommandBuilder mycb = new SqlCommandBuilder(da);
da.InsertCommand = new SqlCommand("INSERT INTO entry_body (code) VALUES (@code)", cn);
da.InsertCommand.Parameters.Add("@code", SqlDbType.NVarChar).SourceColumn = "code";

//باید این دستور اضافه بشه
cmd.CommandText = "SELECT * FROM entry_body";

//شما میخواهید که دیتاست رو از اطلاعات دیتابیس پر کنید.
//اما هنوز مشخص نکردید که با چه دستوری این کار صورت بپذیره.
//پس به همین منظور باید دستور قبل رو اضافه کنید.
da.Fill(ds, "entry_body");
dataGridView1.DataSource = ds;
dataGridView1.DataMember = "entry_body";


اینها همش برای خواندن اطلاعات از دیتابیس بود، برای اضافه کردن اطلاعات شما قبلا خاصیت da.InsertCommand رو تنظیم کردید. یعنی قبلا خطوط زیر رو نوشتید:


da.InsertCommand = new SqlCommand("INSERT INTO entry_body (code) VALUES (@code)", cn);
da.InsertCommand.Parameters.Add("@code", SqlDbType.NVarChar).SourceColumn = "code";

پس هر جا کاربر از طریق dataGridView1 رکورد اضافه کرد یا اینکه خودتون رکوردها رو به ds (دیتاست) اضافه کنید و فقط کافیست که متد Update رو صدا بزنید تا رکورد ها اضافه بشه.

Ali2200
شنبه 03 شهریور 1386, 14:12 عصر
این کد اطلاعات جدولم را نشان میده نمی خوام این طوری باشه من یک دیتاگرید دارم که کاربر اطلاعات را وارد می کنه و مره تو جدول همین ولی این کاری به نام ستون هایی که من تو گریدم دارم نداره خودش ستون های جدول را که نامشان انگلیسی است نشان می ده. چه کار کنم؟

PC2st
شنبه 03 شهریور 1386, 16:56 عصر
ولی این کاری به نام ستون هایی که من تو گریدم دارم نداره خودش ستون های جدول را که نامشان انگلیسی است نشان می ده. چه کار کنم؟
نام ستونها رو تغییر بدید:


dataSet1.Tables["TableName"].Columns["FieldName"].ColumnName = "نام ستون";

TableName نام جدول و FieldName نام ستونی است که میخواهید تغییر نامش بدید.

Ali2200
یک شنبه 04 شهریور 1386, 11:24 صبح
لطفا یک کدی بده که فقط اطلاعات گرید را وارد جدول کنه.
ممنون

PC2st
یک شنبه 04 شهریور 1386, 16:51 عصر
لطفا یک کدی بده که فقط اطلاعات گرید را وارد جدول کنه.
اگر منظورت از "فقط اطلاعات گرید"، اینه که فقط رکوردها اضافه بشن و رکوردها در ستونهایی که خودت مشخص کردی، نمایش داده بشوند، باید از DataTableMapping و از اینجور کلاسها استفاده بشه.