我知道有这样的问题已经存在,但我已将所有常用代码合并到答案中,但仍然没有成功,所以我在这里。
这是交易。我有一个代码块使用SqlDataAdapter.Update将新行插入现有表...
string command = "SELECT * FROM " + tableName;
// Initialize connection
if (oConn == null)
{
oConn = new SqlConnection(mainConnStr);
}
sCmd = new SqlCommand(command, oConn);
sCmd.CommandText = command;
SqlDataAdapter sDA = new SqlDataAdapter(sCmd);
DataSet ds = new DataSet();
oConn.Open();
sDA.Fill(ds, tableName);
oConn.Close();
DataTable dt = ds.Tables[tableName];
//Add each row.
for (int i = 0; i < queryResult.Rows.Count; i++)
{
dt.ImportRow(queryResult.Rows[i]);
}
// Handle the command building for the table update.
SqlCommandBuilder sCB = new SqlCommandBuilder(sDA);
oConn.Open();
sDA.Update(ds, tableName);
oConn.Close();
如前所述,这很好用。但是,如果我尝试使用两列测试表非常相似的代码(testInt,int非null;以及testSTring,varchar(50),null-allowed)......
private static void Main(string[] args)
{
SqlConnection = /* Build connection */
string sqlQuery = "SELECT * FROM TestTable WHERE 0 = 1";
SqlDataAdapter sDA = new SqlDataAdapter(sqlQuery, conn);
DataSet dataSet = new DataSet();
conn.Open();
sDA.Fill(dataSet);
conn.Close();
DataRow newRow = dataSet.Tables[0].NewRow();
newRow["testInt"] = 12;
SqlCommandBuilder cb = new SqlCommandBuilder(sDA);
conn.Open();
sDA.Update(dataSet);
conn.Close();
}
这段代码什么也没做,我无法弄清楚世界上有什么区别。 (我应该注意到我也尝试使用ImportRow而不是NewRow技术。)即使我尝试使用与第一个块(工作块)相同的表的代码块,它仍然不会更新数据。
因此,我的问题是:使用SqlDataAdapter.Update时必须考虑哪些细节?
感谢。
-F
答案 0 :(得分:2)
您必须将行添加到DataSet
DataRow newRow = dataSet.Tables[0].NewRow(); // this doesn't add a new row to the data set
dataSet.Tables[0].Rows.Add(newRow); // you have to call this after