C# SQLDataAdapter - 不将数据插入数据库

Posted

技术标签:

【中文标题】C# SQLDataAdapter - 不将数据插入数据库【英文标题】:C# SQLDataAdapter - Not inserting data into DB 【发布时间】:2015-09-03 20:58:28 【问题描述】:

这是我得到的:用户从数据库名称的复选框中选择一个他们想要归档的数据库名称。切换大小写以捕捉选择。

case "userSelection":
                sqlAdapter = CreateMyAdapter("dbName", true, sqlconn, null);
                sqlAdapter.SelectCommand.CommandText += "";
                sqlAdapter.Fill(myDS.tableName);
                sqlAdapter.Dispose();

适配器:

private SqlDataAdapter CreateMyAdapter(string TableName, bool IncludeUpdates, SqlConnection sqlConn, SqlTransaction sqlTran)

    SqlDataAdapter sqlAdapter = null;
    SqlConnection sqlConnArchive = new SqlConnection();

    strSQL = "SELECT " + TableName + ".* FROM " + TableName;
    sqlAdapter = new SqlDataAdapter(strSQL, sqlConn);

    // Right here, I create another sqlConnection that is pointed to
    // another datasource.

    sqlConnArchive = getThisOtherConnection();

    SqlCommand sqlComm;

    if (IncludeUpdates)
    
        string strInsertSQL = "<insertQuery>";

        sqlComm = new SqlCommand(strInsertSQL, sqlConnArchive);
        sqlComm.Parameters.Add("@TableID", SqlDbType.Int, 0, "TableID");
        // More params here...

        sqlAdapter.InsertCommand = sqlComm;

        // Update

        // Delete

    
 
        return sqlAdapter;

问题: 如您所见,sqlConn 是绑定到 SELECT 命令的连接。 sqlConnArchive 与 INSERT 绑定。这里的想法是,如果您愿意,我可以从 DB_1 中选择数据,然后使用相同的 SQLDataAdapter 将其插入 DB_2。但我遇到的问题是试图插入。选择工作正常,在这一行 sqlAdapter.Fill(myDS.tableName); 一旦填充执行,数据就在那里。但是插入不起作用。

一些事情:

我测试了 SQLDataAdapter 是否可能无法处理多个数据源/连接,切换了一些东西,所以它指向同一个数据库,只是不同的表,我看到了相同的结果。

我已确认问题不在 INSERT 查询中。

没有错误,只是在调试中直接跳过。

我已经尝试了.Update() 的几种排列方式,但都没有奏效。我被分配的这个项目,在整个过程中,.Fill(); 似乎是将数据提交回数据库的原因。

我已经测试了数据库端并且可以连接。登录等没有问题。

非常感谢提供任何帮助。

请注意 - 我试图更加强调“非常”这个词,但受到我的工具集的限制。显然 SOF 不支持粗体、闪烁、下划线、火焰或嵌入音乐。

【问题讨论】:

【参考方案1】:

我想你想要ExecuteNonQuery

var rowsAffected = sqlAdapter.InsertCommand.ExecuteNonQuery();

这将执行语句,然后返回受影响的行数。 Fill 方法不会运行任何InsertCommands。

【讨论】:

嘿,它在某个地方。对此有什么想法吗? “附加信息:参数化查询'(@TableID int,@RowID int,@otherValue tinyint,@otherID int,@somethingElse' 需要参数'@TableID',但未提供。”我问是因为这是在代码中指定的:SqlParameter sqlParam = sqlComm.Parameters.Add("@NewID", SqlDbType.Int, 0, "TableID"); sqlParam.Direction = ParameterDirection.Output; sqlAdapter.InsertCommand = sqlComm; 该语句正在为@NewID 添加一个参数,其值为“TableID”。它没有为@TableID 添加参数。我想你想要 sqlComm.Parameters.Add("@TableID", SqlDbType.Int, 0, tableId) 其中tableId 是一些 int 变量。 嗯好的。好吧,它似乎需要这个:SqlParameter sqlParam = sqlComm.Parameters.Add("@TableID", SqlDbType.Int, 0, "TableID");。但是当我设置它时,它说 TableID 已经被声明了。如果我触摸 sqlComm.parameters sqlComm.Parameters.Add("@TableID", SqlDbType.Int, 0, "TableID"); 中的任何内容,它会出现与上面相同的错误,但下一行除外。因此,与其说它期待一个 TableID,不如说它现在正在寻找一个 RowID,等等。想法? @TonyD。您可能应该对这些信息提出另一个问题,它似乎太复杂而无法放入 cmets。 建议:***.com/questions/32387164/…

以上是关于C# SQLDataAdapter - 不将数据插入数据库的主要内容,如果未能解决你的问题,请参考以下文章

C#中SqlDataAdapter的使用小结

C# SqlDataAdapter 不填充数据集

C# SqlDataAdapter.Fill 在传递数据表参数时给出关于数据转换的错误

在 C# 中使用 SqlDataAdapter 更新数据库

C# SqlDataAdapter 与来自多个数据库的表的 JOIN

C# SqlDataAdapter 与来自多个数据库的表的 JOIN