PDA

View Full Version : مبتدی: عدم درك مشكل در كد كار با پايگاه داده



fidelio
پنج شنبه 25 شهریور 1389, 00:12 صبح
سلام.
من تازه كار با پايگاه داده رو شروع كردم. من يك برنامه نوشتم كه در يكي از فرم هاش اين هدف رو دنبال مي كنه:
در يك فايل روي هادر كه در اين جا درايو c است، تمامي داده هاي يك datatable رو درون يك جدول در اون فايل ذخيره كند. مشكل من در اون قسمتي است كه datatable رو تو يك table ذخيره كني. تو اين جا اين كار به عهده ي button3 هست. اون قسمت خالي كه به صورت كامنت گذاشتم مشكل اصلي منه.
كسي امكان داره بتونه اين بخش رو راهنمايي كنه به صورت عملي؟ خيلي ممنون




using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Linq;

using System.Text;

using System.Windows.Forms;

using System.Data.SqlClient;

using System.IO;


namespace TextToDataBase
{
publicpartialclassForm2 : Form

{
public Form2()
{
InitializeComponent();
}
DataTable dt;
DataTable dt2;
privatevoid button1_Click(object sender, EventArgs e)
{
string str;
SqlConnection myConn = newSqlConnection("Server=(local);Integrated security=SSPI;database=master");
str = "CREATE DATABASE datamining_fourth ON PRIMARY" +
"(NAME=dataming_dat, FILENAME='C:\\dataminingforth.mdf', SIZE=10MB,MAXSIZE=50MB,FILEGROWTH=10%)" +
"LOG ON (NAME=datamining_log, FILENAME='C:\\dataminingforth.ldf', SIZE=1MB,MAXSIZE=5MB,FILEGROWTH=10%)";
SqlCommand myCommand = newSqlCommand(str, myConn);
SqlConnection tableConn = newSqlConnection ("Server=(local);Integrated security=SSPI;database=datamining");
string str2;
str2= "CREATE TABLE drugdata ("+
"[Age] [int] IDENTITY(1,1) NOT NULL,"+
"[Sex] [bit] NOT NULL"+
"[BP] [int] NULL"+
"[Cholestrol] [int] NULL"+
"[NA] [int] NULL"+
"[K] [int] NULL"+
"[Drug] [string] NULL";
SqlCommand tablecmd = newSqlCommand(str2,tableConn);
try

{
myConn.Open();
myCommand.ExecuteNonQuery();
MessageBox.Show("پایگاه داده با موفقیت ایجاد شد!", "پیغام", MessageBoxButtons.OK, MessageBoxIcon.Information);
tableConn.Open();
tablecmd.ExecuteNonQuery();
}
catch (System.Exception ex)
{
MessageBox.Show(ex.Message, "خطا", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
finally

{
if (myConn.State == ConnectionState.Open)
myConn.Close();
if (tableConn.State == ConnectionState.Open)
tableConn.Close();
}
}
privatevoid Form2_Load(object sender, EventArgs e)
{
dt = newDataTable();
dt.Columns.Add("Age");
dt.Columns.Add("Sex");
dt.Columns.Add("BP");
dt.Columns.Add("Cholestrol");
dt.Columns.Add("Na");
dt.Columns.Add("K");
dt.Columns.Add("Drug");
StreamReader fg = newStreamReader("c:\\drug data mining.txt");
while (!fg.EndOfStream)
{
string val = fg.ReadLine();
string[] cells = val.Split(',');
for (int j = 0; j < cells.Length - 6; j++)
dt.Rows.Add(cells[0], cells[1], cells[2], cells[3], cells[4], cells[5], cells[6]);
}
dataGridView1.DataSource = dt;
dt2 = dt.Copy();
}
privatevoid button2_Click(object sender, EventArgs e)
{

SqlConnection tableConn = newSqlConnection("Server=(local);Integrated security=SSPI;database=datamining");
string str2;
str2 = "CREATE TABLE drugdata (" +
"[Age] [int] IDENTITY(1,1) NOT NULL," +
"[Sex] [nvarchar] (50) NOT NULL," +
"[BP] [int] NULL," +
"[Cholestrol] [int] NULL," +
"[NA] [int] NULL," +
"[K] [int] NULL," +
"[Drug] [nvarchar] (50) NULL)";
SqlCommand tablecmd = newSqlCommand(str2, tableConn);
try

{
tableConn.Open();
tablecmd.ExecuteNonQuery();
MessageBox.Show("جدول با موفقیت ایجاد شد!","پیغام", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
catch (System.Exception ex)
{
MessageBox.Show(ex.Message, "خطا", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
finally

{
if (tableConn.State == ConnectionState.Open)
tableConn.Close();
}
}
privatevoid button3_Click(object sender, EventArgs e)
{
DataSet miningSet = newDataSet();
miningSet.Tables.Add(dt);
SqlConnection insrConn = newSqlConnection("Server=(local);Integrated security=SSPI;database=datamining");
SqlDataAdapter sda = newSqlDataAdapter("Select * FROM dt", insrConn);
sda.Fill(miningSet.Tables["dt"]);
/*


*/
try

{
insrConn.Open();
insrcmd.ExecuteNonQuery();
MessageBox.Show("عمل درج با موفقیت ایجاد شد!", "پیغام", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
catch (System.Exception ex)
{
MessageBox.Show(ex.Message, "خطا", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
finally

{
if (insrConn.State == ConnectionState.Open)
insrConn.Close();
}
}
}
}

حامد فراست
پنج شنبه 25 شهریور 1389, 10:22 صبح
با سلام
باید تو این قسمت از کد که جاشو خالی گذاشتی یک دستور insert با نام insrcmd قرار بدی

string insert = "insert into ..."
SqlCommand insrcmd = newSqlCommand(insert , insrConn);

که در رشته insert دستور insert کردن مورد نظرترو باید بنویسی
:لبخندساده: البته اگه درست منظورتو فهمیده باشم

fidelio
پنج شنبه 25 شهریور 1389, 10:32 صبح
ممنون از توجه ات. دقيقا اين طوريه. فقط يك مشكل كه من نمي دونم براي يك datatable با 200 ركورد و هفت ستون چطور مي شه insert نوشت. چون حالت كلي دستور insert به صورت
(,,,)INSERT INTO tablename VALUES
هستش.
به نحوي نمي شه از dataadapter استفاده كرد كه در انتخاب همه ي ركورد ها ساده تر باشه؟

حامد فراست
پنج شنبه 25 شهریور 1389, 11:36 صبح
از این سبک کد هم میتونی استفاده کنی و فیلد های دلخواه ترو insertکنی

// Create a new row.
NorthwindDataSet.RegionRow newRegionRow;
newRegionRow = northwindDataSet.Region.NewRegionRow();
newRegionRow.RegionID = 5;
newRegionRow.RegionDescription = "NorthWestern";

// Add the row to the Region table
this.northwindDataSet.Region.Rows.Add(newRegionRow );

// Save the new row to the database
this.regionTableAdapter.Update(this.northwindDataS et.Region);


http://msdn.microsoft.com/en-us/library/ms233812(VS.80).aspx