string sSqlStr="InsertAllData @sMod,@sNum,@dNumDate,@iN1,@iN2,@iN3,@iN4,@iN5,@iN6,@iN7,@iN8,@iN9";
--->string sSqlStr="InsertAllData";

解决方案 »

  1.   

    应该是
    EXECUTE InsertAllData @sMod,@sNum,@dNumDate,@iN1,@iN2,@iN3,@iN4,@iN5,@iN6,@iN7,@iN8,@iN9";
      

  2.   

    to wangxiaohu(如花) 51106354(大头)
    已经试过,依然抱错看过MSDN的例子,他们的
    例子:OleDbCommand2.CommandText = "NewAuthor";
    OleDbCommand2.CommandType = CommandType.StoredProcedure;// Set parameter values. In this case, all parameter values
    // are strings.
    OleDbCommand2.Parameters["au_id"].Value = TextBox1.Text;
    OleDbCommand2.Parameters["au_lname"].Value = TextBox2.Text;
    OleDbCommand2.Parameters["au_fname"].Value = TextBox3.Text;
    ...
    ...
    ...
    ...OleDbConnection2.Open();
    try
    {
       cmdresults = OleDbCommand2.ExecuteNonQuery();
    }
    catch (Exception ex)
    {
       MessageBox.Show("Failed to execute command");
    }
    OleDbConnection2.Close();我的是用Parm,但是我使用CommandType.Text(这个是默认)就可以阿?怎么回事?
      

  3.   

    例子地址:
    ms-help://MS.MSDNQTR.2003FEB.2052/vbcon/html/vbtskExecutingUpdatesOrDatabaseCommandsUsingDataCommand.htm
      

  4.   

    SqSqlCommand myCommand= new SqlCommand(sSqlStr,myConnection);
    myCommand.CommandType=CommandType.StoredProcedure;
    SalParameter param;
    param=myCommand.Parameters.Add(("@sMod",SqlDbType.NVarChar,50);
    param.Value=bo.Mod;
    ......
      

  5.   

    to  fengqingyang1979(风轻扬)
    依然不行!
    在线等
      

  6.   


    SqSqlCommand myCommand= new SqlCommand("InsertAllData",myConnection);
    myCommand.CommandType=CommandType.StoredProcedure;
    myCommand.Parameters.Add("@sMod",SqlDbType.NVarChar,50).Value=bo.Mod;使用存储过程只用名字就可以。
    然后把必要的参数添加进去就可以。你的那个方法是个查询语句里面调用存储过程,所以要用myCommand.CommandType=CommandType.Text
    这样不能把存储过程的优势发挥到极致。
      

  7.   

    to  fengyuyan(风雨岩)
    我也试过,依然如此
      

  8.   

    试试string sSqlStr=@"InsertAllData @sMod,@sNum,@dNumDate,@iN1,@iN2,@iN3,@iN4,@iN5,@iN6,@iN7,@iN8,@iN9";
      

  9.   

    调用存储过程的标准方法:
    SqlCommand cmd=new ("sp.存储过程名称",myconnection);
    cmd.CommandType=CommandType.StoredProcedure;
    cmd.Parameters.Add("参数名",SqlDbType.数据类型,数据长度);
    cmd.Parameters["参数名"].value=变量;
    这样就很少出错啦
      

  10.   

    何必那么烦呢? 在 sql 里写好存储过程,比如:create proc spinsert
        @par1 nvarchar(50),
        @par2 int,
        @par3 datetime,
        ...
        @parN typeN
    asinsert into table1 (col1, col2, col3, ... , colN)
    values (@par1, @par2, @par3, ... , @parN)go在程序中调用:string strSql = "spinsert '" +
        par1 + "', '" +
        par2 + "', '" +
        par3 + "', '" +
        ...
        parN + "'";// 被传递的参数顺序可以颠倒,但参数的类型必须匹配。SqlConnection cn = new SqlConnection(connectionString);
    SqlCommand cmd = new SqlCommand(strSql, cn);
    cn.Open();
    cmd.ExecuteNonQuery()// OK
      

  11.   

    楼上的,自己拼SQL语句会有SQL注入攻击的危险。
    string sSqlStr="InsertAllData";
    SqlCommand cmd = new SqlCommand(strSql, cn);
    cmd.CommandType=CommandType.StoredProcedure;
    这样一定不会有错的,设置CommandType为StoredProcedure的时候CommandString只能是存储过程的名字,不能有别的。如果还有错的话,把出错信息帖出来一下。
    如果要写成
    string sSqlStr="InsertAllData @sMod,@sNum,@dNumDate,@iN1,@iN2,@iN3,@iN4,@iN5,@iN6,@iN7,@iN8,@iN9";
    的形式,InsertAllData后面不应该跟@sMod这样的参数名,而应该跟参数的具体值,就像你在查询分析器里调用存储过程时写的语句一样。
      

  12.   

    而且CommandType要设置为Text。 漏了说了。
      

  13.   

    我不觉得我那样麻烦,反倒觉得那样标准,正像楼上所说自己拚sql容易被注入,解决的办法就是利用存储过程或者加验证,个人习惯问题,仅供参考
      

  14.   

    是呀,greennetboy的做法是存储过程的标准用法呀。
      

  15.   

    通用的方法:
    SQLCommand cmd = new SQLCommand("spGetAuthorByID", con);
    cmd.CommandType = CommandType.StoredProcedure;
    SQLParameter prmID = new SQLParameter("@AuthID", SQLDataType.VarChar,11);
    prmID.Value = "111-11-1111"
    cmd.SelectCommand.Parameters.Add(prmID); 
    cmd.Execute();
      

  16.   

    谢谢楼上的诸位帮助,我已经搞好!
    具体原因是存储过程中我使用SQLParameter的时候变量名和我的存储过程中的变量名不否导致了执行存储过程失败。后来我将存储过程中的变量和C#函数SQLParameter中的变量名改为一致即可。
    非常感谢大家!
      

  17.   

    To cppTrier(cnblogs.com/hush):据个例子来瞅瞅!