我知道这样的问题已经存在,但我已将所有常见代码结合到答案中,但仍然没有取得成功,所以我就是这样。SqlDataAdapter.Update:是否存在SQL版本要求?
这是交易。我有一个代码块使用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非空;和的TestString,一个varchar(50),空允许的)非常相似的代码...
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
也许你需要返回一些数据,然后才能更新呢? – ChrisBint
我假设这只是示例代码,而不是你如何编写真实的东西,但正如头一样,'SqlCommandBuilde,'DataSet','DataTable'和你的'SqlConnection'都实现了'IDisposable',并且应该有他们调用了Dispose()方法。 – pstrjds