ExecuteCommand返回-1但更新记录

时间:2011-06-28 15:26:35

标签: c# sql

这是我的更新语句:

StringBuilder queryUpdate = new StringBuilder();
queryUpdate.AppendFormat("UPDATE TPMdailydata SET FISBTranIntvairmet={0},FISBTranIntvmetr={1},FISBTranIntvnexradnational = {2} ", svd.Data[1].SecPerUpdate.ToString("0.0"), svd.Data[2].SecPerUpdate.ToString("0.0"), svd.Data[3].SecPerUpdate.ToString("0.0"));
queryUpdate.AppendFormat(",FISBTranIntvnexradregional = {0},FISBTranIntvnotam = {1},FISBTranIntvoutage = {2} ", svd.Data[4].SecPerUpdate.ToString("0.0"), svd.Data[5].SecPerUpdate.ToString("0.0"), svd.Data[7].SecPerUpdate.ToString("0.0"));
queryUpdate.AppendFormat(",FISBTranIntvpirep = {0},FISBTranIntvsigmet = {1},FISBTranIntvSUA = {2} ", svd.Data[8].SecPerUpdate.ToString("0.0"), svd.Data[9].SecPerUpdate.ToString("0.0"), svd.Data[10].SecPerUpdate.ToString("0.0"));
queryUpdate.AppendFormat(",FISBTranIntvTAF = {0},FISBTranIntvTISB = {1},FISBTranIntvwind = {2}, AirportID = '{3}' ", svd.Data[11].SecPerUpdate.ToString("0.0"), svd.Data[12].SecPerUpdate.ToString("0.0"), svd.Data[13].SecPerUpdate.ToString("0.0"), des);
queryUpdate.AppendFormat("where SVID = {0} and reportdate = '{Z}' ", (int)svd.ID, rptdate.ToShortDateString());
queryUpdate.AppendFormat("and siteID = '{0}'", siteID);
string cmd = queryUpdate.ToString();

执行人:

rowsreturned = this.dba.ExecuteCommand(cmd);

像这样写到控制台:

Console.WriteLine(string.Format("cmd-{0}",cmd)); //+ "and siteID = '{0}'",siteID
Console.WriteLine(String.Format("Number of rows updated: {0} UPDATE FISB Data: report date {1} svid {2} ", rowsreturned, rptdate, svd.ID));

结果如下:

  

CMD-UPDATE TPMdailydata SET FISBTranIntvairmet = 124.8,FISBTranIntvmetr = 252.0,FISBTranIntvnexradnational = 905.4,FISBTranIntvnexradregional = 150.6,FISBTranIntvnotam = 248.5,FISBTranIntvoutage = 0.0,FISBTranIntvpirep = 494.8,FISBTranIntvsigmet = 123.8,FISBTranIntvSUA = 551.8,FISBTranIntvTAF = 553.7,FISBTranIntvTISB = 13.3,FISBTranIntvwind = 554.1,AirportID ='ZDC',其中SVID = 158并且reportdate ='6/20/2011'和siteID ='DEV'   更新的行数:-1 UPDATE FISB数据:报告日期6/20/2011 12:00:00 AM svid 158

更新确实有效,但我期待更新行数的返回值。我得-1。我觉得这很糟糕。我似乎无法找到关于-1意味着什么的任何信息。 帮助任何人?

2 个答案:

答案 0 :(得分:1)

您需要对代码进行参数化并将参数添加到字符串中,而不是让人们尝试浏览上面的意大利面。即使您不想为了可维护性而这样做,也将消除SQL注入的可能性。

至于你的-1,我不知道为什么。你可以设置很多东西来实现这一目标。我会尝试远离LINQ,因为没有理由通过LINQ对象运行此查询。这是一个直接调用SQL命令而不是通过隐式FUD层的模式:

        string connString = "{Connection string here}";
        string sql = "{SQL Query Here}";

        using(SqlConnection conn = new SqlConnection(connString))
        {
            conn.Open();

            using(SqlCommand cmd = new SqlCommand(sql, conn))
            {
                int numRows = cmd.ExecuteNonQuery();
            }
        }

ADDED:要尝试上述方法,而不创建SQL Connection,请更改此项:

rowsreturned = this.dba.ExecuteCommand(cmd); 

到这个

        SqlConnection conn = (SqlConnection) dba.Connection;
        using(SqlCommand cmd = new SqlCommand(queryUpdate, conn))
        {
            rowsreturned = cmd.ExecuteNonQuery();
        }

这将拉出您已有的上下文,您可以看到rowsReturned是否仍然存在问题。如果是这样,请检查命令字符串并考虑直接在SQL Studio中运行它。

答案 1 :(得分:0)

有时,数据库具有不会发送更新记录数量的选项。

例如,对于SQL Server,如果在存储过程中完成此操作:

SET NOCOUNT ON

然后受影响的记录将始终返回-1。

对于阻止返回记录数量的数据库或提供程序,可能存在这样的选项。

相关问题