这个是类public database()
    {
        //
        // TODO: 在此处添加构造函数逻辑
        //
    }
    SqlConnection sqlconn = new SqlConnection(System.Configuration.ConfigurationManager.AppSettings["strcon"]);
    public int rowNumber(string sqlstr)
    {
        sqlconn.Open();
        SqlCommand sqlcom = new SqlCommand(sqlstr, sqlconn);
        int row=sqlcom.ExecuteNonQuery();
        sqlconn.Close();
        return row;
    }以下是调用上面类,想做到查找表中是否有该条记录(表中是有该条记录的),如果有,就修改表中数据,如果没有就增加记录。但是无论有没有记录db.rowNumber(scd)都是返回-1,如果能得到上面类中row的值呢????
if (db.rowNumber(scd) > 0)
{
    string sql_dingshu_fx_update = "update dingshu_fx set number_dg=number_dg + '" + number + ",number_qs=number_qs+ '" + number + "' where xnd like '%" + xnd + "%' and dwdm like '%" + dwdm + "%' and xslb like '%" + xslb + "%' and jc_id=" + jc_id;
    db.DataCom(sql_dingshu_fx_update);
}
 else
{
    string sql_dingshu_fx = "insert into dingshu_fx" + "(xnd,xslb,jc_id,bookname,number_dg,number_ff,number_qs,dwdm,dwmc)" +
"values('" + xnd + "','" + xslb + "','" + jc_id + "','" + bookname + "','" + number + "','" + "0','" + number + "','" + dwdm + "','" + dwmc + "')";
db.DataCom(sql_dingshu_fx);
}

解决方案 »

  1.   

    我已经试过断点了,SQL语句是没有问题的
      

  2.   

    楼主应该找本关于ADO.NET的书来看下基础int i=cmd.ExecuteNonQuery();//这个方法返回的是执行SQL语句后数据库表受影响的行,一般我们用这个方法执行insert   update  可delete操作,也就是专用于增删改,i就代表执行增删改操作时成功改变了的记录的行数object obj=cmd.ExecuteScalar();//这个方法返回SQL语句最后一条有效查询语句的结果集里的第一行第一列的值,一般我们用这个方法进行一些统计操作,比如,SELECT COUNT([id]) AS RecordNum FORM ....
    //注意,它返回的是一个boject类型的数据,你自己要进行数据类型转换
    //为什么我强调说它识别最后一条SELECT语句的结果集呢?因为在MS SQL 2000版本以后,是可以同时执行多条SQL语句的,比如,我现在同时执行3条SQL语句,INSERT INTO MyTable ([ID]) VALUES (1); UPDATE MyTable SET [ID]=2; SELECT COUNT([ID]) AS RecordNum FROM MyTable//我把这3打语句同时传给object obj=cmd.ExecuteScalar(); 则它会完成执行,这时候,如果不出错,那么,最终该办法返回的值是最后一条语句SELECT COUNT([ID]) AS RecordNum FROM MyTable里的RecordNum,并且无论你这个结果集有多少行多少列,永远只返回第一行第一列(也就是像表格里的第一个单元)的值
      

  3.   

    ExecuteNonQuery的返回值是如果要创建或修改数据库结构,当操作成功时返回值为 -1。 
    因此,看看你的sql语句是否正确了