开发环境:xp sp3,vs2010 .net framework4.如下是一段教程里的代码:private void GetSpecialProduct(int SupplierID)
    {
        //从web.config中获取数据库连接
        string connectionStr = WebConfigurationManager.ConnectionStrings["NorthwindConnectionString"].ConnectionString;
        //创建与数据库的连接
        SqlConnection conn = new SqlConnection(connectionStr);
        conn.Open();
        SqlCommand cmd = new SqlCommand("select * from products where SupplierID=@SupplierID", conn);
        //---------------------------------------------------------------
        //1,使用SqlParameter对象
        //SqlParameter parameter = new SqlParameter();
        //parameter.ParameterName = "@SupplierID";
        //parameter.Direction = ParameterDirection.Input;
        //parameter.Value = SupplierID;
        //cmd.Parameters.Add(parameter);
        //----------------------------------------------------------------
        //2,可以直接使用Parameters的重载的Add方法添加参数
        //cmd.Parameters.Add("@SupplierID", SqlDbType.Int).Value = SupplierID;
        //----------------------------------------------------------------
        //cmd.Parameters.Add("@SupplierID", SqlDbType.Int);
        //cmd.Parameters["@SupplierID"].Value = SupplierID;
        //3,或者使用Parameters.AddWithValue方法添加参数
        cmd.Parameters.AddWithValue("@SupplierID", SupplierID);
        //执行SQL命令并进行数据绑定
        SqlDataReader sdr= cmd.ExecuteReader(CommandBehavior.CloseConnection);
        GridView1.DataSource = sdr;
        GridView1.DataBind();
        conn.Dispose();
    }
如下是我自己写的,被注释的写法会报错,','附近有语法错误。为什么啊?public int Insert(OperationStruct operate)
    {
        SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["POWERDATAConnectionString"].ConnectionString);
        try
        {
            conn.Open();        }
        catch
        {
            return 1; //数据库操作失败
        }
       
        SqlCommand command = new SqlCommand();
        command.Connection = conn;
        command.CommandType = CommandType.Text;
        command.CommandText = "insert into POWERDATA.dbo.Device_Operate" +
                              " values ('"+operate.ip+"',"+operate.address+",'"+operate.userID+"','"+operate.time+"','"+operate.action+"' )";
        /*****为什么下面的写法不对******/
        //command.CommandText = "insert into POWERDATA.dbo.Device_Operate" +
           //" values (@ip,@address,@userID,@time,@action)";
        
        //command.Parameters.Add("@ip",SqlDbType.NVarChar).Value=operate.ip;
        //command.Parameters.Add("@address", SqlDbType.Int).Value = operate.address;
        //command.Parameters.Add("@userID", SqlDbType.NVarChar).Value = operate.userID;
        //command.Parameters.Add("@time", SqlDbType.DateTime).Value = operate.time;
        //command.Parameters.Add("@action", SqlDbType.NText).Value = operate.action;
        try
        {
            command.ExecuteNonQuery();
            conn.Dispose();
        }
        catch
        {
            return 1; //数据库操作失败
        }        return 0;
    }
求解释。。

解决方案 »

  1.   

    sql语句缺少单引号
           command.CommandText = "insert into POWERDATA.dbo.Device_Operate" +
                                  " values ('"+operate.ip+"','"+operate.address+"','"+operate.userID+"','"+operate.time+"','"+operate.action+"' )";
      

  2.   

    sql语句就错了吧,insert 的字段列表呢insert into [table] ([field1],[field2],[filed3]) value(@value1, @value2, @value3)
      

  3.   

    address 是 int 型不用单引号
      

  4.   

    调试一下看看最终的sql语句是什么
      

  5.   

    断点跟踪,看下你的SQL语句。直接放到数据库看下是不否执行
      

  6.   

    insert语句的字段列表好像都需要写出来吧
    insert into 表名 ( 字段名1,字段名2,字段名3,...) value(@value1, @value2, @value3,...)
      

  7.   

    断点调试。。
    把生成的SQL语句放到查询分析器中,看能否正常运行。
      

  8.   

    address 是 int 型不用单引号
      

  9.   

    看下参数类型是否与库中数据类型相同,最好调试下,获取最终SQL语句在查询分析器里运行看看
      

  10.   

    这个最直接有效  我看很可能是有的参数是null值  以前也遇到过  不过那是因为一个语句里参数名写错了
      

  11.   

    command.Parameters.Add(new sqlparameters("@address", SqlDbType.Int)).Value = operate.address;