这是我写的一个存储过程 ,语法检查时并没有错:
CREATE  procedure checkName
@tableName varchar(50) output,
@name varchar(100) output,
@unit varchar(100) output,
@num varchar(50) output,
@build varchar(50) output,
@install varchar(50) output,
@imp varchar(50) output,
@other varchar(50) output,
@total varchar(50) output,
@standard varchar(50) output
as
declare @sql varchar(2000)set @sql='update ' +@tableName+ ' set d_unit='+@unit+',d_num='+@num+',d_build='+@build+',d_install='+@install+',d_imp='+@imp+',d_other='+@other+',d_total='+@total+',d_standard='+@standard+'where d_name='+@name+' '
exec(@sql)
GO
调用程序如下:
 public void procedure(string tableName,string name,string unit,string  num,string build,string install,string imp,string other,string total,string standard)
    {
        SqlConnection sqlc = new SqlConnection("server=.;database=tlxt;uid=sa;pwd=;integrated security=SSPI;persist security info=False;");
        SqlCommand comm = new SqlCommand("checkName", sqlc);
        comm.CommandType = CommandType.StoredProcedure;
        comm.Parameters.Add("@tableName", SqlDbType.VarChar,50);
        comm.Parameters["@tableName"].Value = tableName.ToString ();
        comm.Parameters.Add("@name", SqlDbType.VarChar, 100);
        comm.Parameters["@name"].Value = name.ToString ();
        comm.Parameters.Add("@unit", SqlDbType.VarChar, 100);
        comm.Parameters["@unit"].Value = unit.ToString();
        comm.Parameters.Add("@num", SqlDbType.VarChar, 50);
        comm.Parameters["@num"].Value = num.ToString();
        comm.Parameters.Add("@build", SqlDbType.VarChar, 50);
        comm.Parameters["@build"].Value = build.ToString();
        comm.Parameters.Add("@install", SqlDbType.VarChar, 50);
        comm.Parameters["@install"].Value = install.ToString();
        comm.Parameters.Add("@imp", SqlDbType.VarChar, 50);
        comm.Parameters["@imp"].Value = imp.ToString();
        comm.Parameters.Add("@other", SqlDbType.VarChar, 50);
        comm.Parameters["@other"].Value = other.ToString();
        comm.Parameters.Add("@total", SqlDbType.VarChar, 50);
        comm.Parameters["@total"].Value = total.ToString();
        comm.Parameters.Add("@standard", SqlDbType.VarChar, 50);
        comm.Parameters["@standard"].Value = standard.ToString();        comm.Connection.Open();
        comm.ExecuteNonQuery();
        Response.Write("数据已经成功导入!");
}运行之后说d_unit和d_name导入的数据无效,这是怎么回事,存储过程好像没有错啊。还请大虾帮忙!

解决方案 »

  1.   

    没有啊,这些插入的值打印时都能正常输出。就是插入不了。是不是动态SQL语句有问题。
      

  2.   

    你存储过程写的对吗?先在SQL SERVER测试一下,再到VS里设断点测试一下,总感觉是存储过程里的SQL语句有问题
      

  3.   

    存储过程有问题 output 是定义输出变量
      

  4.   

    把output全去掉吧,去掉之后就应该会没有问题了
      

  5.   

    1、首先看你的储存过程应该是对数据库表的数据进行 修改操作,
    而你传入的 @****  应该就是修改以后的值  因此 你在存储过程中不用定义成 output2、如果你要获取添加以后的值  即 output的值 则 不能定义为:comm.Parameters["@standard"].Value = standard.ToString(); 应该定义为 output个人意见
      

  6.   

    能不能说具体点,到底要怎么改才对呢?tableName和name是原来的值,不必更改的,剩下的都是修改后的值,那我的代码要怎么写?