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
方法不会运行任何InsertCommand
s。
【讨论】:
嘿,它在某个地方。对此有什么想法吗? “附加信息:参数化查询'(@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.Fill 在传递数据表参数时给出关于数据转换的错误