SqlDataAdapter.Update:是否有SQL版本要求?

时间:2011-07-07 17:58:48

标签: c# sql-server

我知道有这样的问题已经存在,但我已将所有常用代码合并到答案中,但仍然没有成功,所以我在这里。

这是交易。我有一个代码块使用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

1 个答案:

答案 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