C#错误:更新在传递带修改行的数据集合时需要有效的updatecommand吗?

时间:2016-01-13 16:40:15

标签: c# sql-server datatable ado.net sqldataadapter

我知道这个错误/问题已经发布了很多。我已经研究了一段时间,仍然无法弄清楚如何通过我的DataTable中的更改来正确更新我的数据库。

我有一个DataTable,它填充了我数据库中2个不同表的信息。仅对来自1个表的列进行更改。第二个表我需要加入计算。

因此,当我尝试更新数据库时,只会对1表进行更改。我仍然需要ado.net,因此我很难根据MSDN和StackOverflow的信息应用正确的方法来应用这些更改。

这是我的代码:

 using (SqlCommand cmd = new SqlCommand("SELECT INCIDENT_NO, report_dt,MIN(theStart) as The_Start, Resolved_DT, Resolution_TIME, resolution_met,response_met,max_response_time,max_resolution_time,impact FROM TICKET_REPORT JOIN TimeTracker ON Incident_NO=theTask WHERE Resolved_DT != '' GROUP BY INCIDENT_NO,report_dt,Resolved_DT,Resolution_Time, resolution_met,response_met,max_response_time,max_resolution_time,impact", sqlConn))
            {
                var calc = new Calculation(holidays, new OpenHours("09:00;17:00"));
                SqlDataAdapter da = new SqlDataAdapter(cmd);
                dtResolution.Columns.Clear();
                dtResolution.Clear();
                da.Fill(dtResolution);

               //-------Making calculation changes to columns from one table in datatable here---------
                try
                {
                    da.Update(dtResolution);
                    Console.WriteLine("Update successful");
                }
                catch(Exception ex)
                {
                    Console.WriteLine("Updated failed");
                    Console.WriteLine(ex.Message);
                }
                da.Dispose();
            }

我认为CommandBuilder会为我创建更新命令,但MSDN说我只能使用CommandBuilder,如果我的SELECT语句只包含1个表,我有2个。

其他StackOverflow的答案是说如果我正在使用JOIN,我就是我自己。

如何正确完成此更新?我可以用C#做​​这个吗?我应该将数据表传递给sqlserver中的存储过程吗?

1 个答案:

答案 0 :(得分:0)

我发现在存储过程中创建合并语句更容易,只需将数据表传递给存储过程即可。