C#SqlDataAdaptor更新不更新数据库
我脑中有一件相对简单的工作,但它比预想的要困难得多,因为我无法得到它的工作。 我正在使用C#,尝试将数据从csv文件解析到DataTable中,然后将其插入到SQL数据库中。 我想这样做,以便将来可以从数据库文件中工作(我希望它比CSV文件更快更简单,但请告诉我这是否是一个错误的假设)。
我可以将数据存入数据表。 然后我重命名列以匹配数据库文件中的内容。 然后我创建一个数据集,并将数据表添加为数据集的“表1”。
但是,当我从SqlDataAdaptor调用“Update”方法时,代码运行正常,除了数据在数据库中没有更新! 我猜测我只是在做一些小的愚蠢的错误,所以我很抱歉,因为我是C#和OOP的相对新手。
以下是我尝试使用的代码:
SqlConnection con;
DataTable dt1;
SqlDataAdapter da;
private void Form1_Load(object sender, EventArgs e)
{
con = new SqlConnection();
con.ConnectionString = "Data Source=.SQLEXPRESS;AttachDbFilename=C:dbTestCSV.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True";
con.Open();
string sql = "SELECT * FROM tblTestCSV";
da = new SqlDataAdapter(sql, con);
SqlCommandBuilder cb;
cb = new SqlCommandBuilder(da);
dt1 = ParseCSV("C:testcsv2.csv");
dt1.Columns[0].ColumnName = "Numbers";
dt1.Columns[1].ColumnName = "Col1";
dt1.Columns[2].ColumnName = "Col2";
dt1.Columns[3].ColumnName = "Col3";
dt1.Columns[4].ColumnName = "Col4";
dt1.Columns[5].ColumnName = "Col5";
foreach (DataRow dr in dt1.Rows)
{
dr.SetModified();
}
DataSet ds1 = new DataSet();
ds1.Tables.Add(dt1);
da.Fill(ds1);
da.Update(ds1,"Table1");
dataGridView1.DataSource = dt1;
con.Close();
da.Dispose();
MessageBox.Show("sql server table data updated!");
}
我已经浏览了互联网和计算器,但是我遇到的所有解决方案都不明白,或者他们不工作。 谢谢你的时间。
编辑:我已经改变了一下代码,以便在命令生成器之后不重新声明数据适配器。 但是,它仍然没有更新数据库,尽管代码运行时不会抛出任何东西,最后弹出消息框,然后是带有来自dt1的数据的表单。
为了澄清,我没有从数据库中获取数据。 我正在尝试从CSV文件中获取数据并将其移至数据库。 感谢你目前的帮助。 还有其他建议吗?
编辑2:DataTable“dt1”的结构如下:
标题:数字Col1 Col2 Col3 Col4 Col5
DataTypes:int32 Str Str Str Str Str
有25排。
dbTestCsv.mdf文件中的表如下所示:
标题:数字Col1 Col2 Col3 Col4 Col5
DataTypes:int nvarchar(50) - >
没有行/数据。
编辑3:Heyooo! 得到它的工作。 这基本上是这里的建议的一个合并,所以谢谢大家!
我认为你最好通过创建DataTable使用通用代码来填充数据集,然后添加csv文件中的值,以便他可以根据其第一个状态检测到新的值,然后在此情况下更新将工作。
希望能帮助到你
您需要先使用SqlDataAdapter填充DataSet,然后调用更新方法
e.g. ds1.Fill(da);
所以这里是最终工作的代码。 数据现在有~24000行(仅用于测试),并相应地更新数据库(大约需要4秒才能编译/运行)。 感谢您所有的帮助!
SqlConnection con;
DataTable dt1;
SqlDataAdapter da;
private void Form1_Load(object sender, EventArgs e)
{
con = new SqlConnection();
con.ConnectionString = "Data Source=.SQLEXPRESS;AttachDbFilename=C:dbTestCSV.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True";
con.Open();
string sql = "SELECT * FROM tblTestCSV";
da = new SqlDataAdapter(sql, con);
SqlCommandBuilder cb;
cb = new SqlCommandBuilder(da);
dt1 = ParseCSV("C:testcsv3.csv");
dt1.Columns[0].ColumnName = "Numbers";
dt1.Columns[1].ColumnName = "Col1";
dt1.Columns[2].ColumnName = "Col2";
dt1.Columns[3].ColumnName = "Col3";
dt1.Columns[4].ColumnName = "Col4";
dt1.Columns[5].ColumnName = "Col5";
DataSet ds2 = new DataSet();
da.Fill(ds2);
// THIS IS THE KEY BIT!! This adds the rows from the datatable to the dataset one by one.
// I guess the "Update" command in the dataadapter needs this to happen, rather than just
// adding the table "dt1" to the dataset all at once. Can anyone explain why?
foreach (DataRow dRow in dt1.Rows)
{
DataRow dsRow = ds2.Tables["Table"].NewRow();
dsRow.ItemArray = dRow.ItemArray;
ds2.Tables["Table"].Rows.Add(dsRow);
}
da.Update(ds2,"Table");
dataGridView1.DataSource = dt1;
con.Close();
da.Dispose();
}
链接地址: http://www.djcxy.com/p/68825.html