CREATE proc Utest @id as char(10) , @name as char(10), @pro as char(10) as begin declare @sql as char(100) set @sql='' set @sql = 'update test set ' + @name + ' = 1 ,'+@pro+'=1 where id = ' + cast(@id as varchar) exec(@sql) end GO
CREATE proc Utest @id as char(10) , @name as char(10), @pro as char(10) as begin declare @sql as char(100) set @sql = 'update test set ' + @name + ' = 1 ,'+@pro+'=1 where id = ''' + @id +'''' exec(@sql) end
dawugui 这位大哥,那天就是你帮我解决的,现在我看了看数据库,已经修改成功了,就是会提示错误 如果不用存储过程能实现吗? 就像这样: string id = Request.Form["YX_CH"]; string name = this.DropDownList1.SelectedValue.ToString(); string pro = this.DropDownList2.SelectedValue.ToString(); SqlConnection conn = new SqlConnection(System.Configuration.ConfigurationManager.AppSettings["ConnectionString"]); conn.Open(); string sql = "update test set ' + @name + ' = 1 ,'+ @pro + '=1 where id = ' + cast(@id as varchar) "; SqlCommand cmd = new SqlCommand(sql, conn); cmd.ExecuteNonQuery(); COMP.Jscript.AlertAndRedirect("修改成功!", "Default.aspx"); conn.Close();
回sdhdy : 我用的: set @sql = 'update test set ' + @name + ' = 1 ,'+@pro+'=1 where id = ' + cast(@id as varchar) 已经修改成功了,只是提示的错误应该是代码哪里错了吧? 要是存储过程错了,修改不成功吧
存储过程是没有问题的,关键是你的c#代码写错了。GridView1.DataSource = mm.Utest(id.ToString(), name.ToString(), pro.ToString()).Tables[0].DefaultView; 这个地方。你这里执行的语句是修改,只能返回受影响的行数。 Utest方法却还返回DataSet,这不胡扯吗? 而且还绑定到GridView上面。oh, my god!
CREATE proc Utest
@id as char(10) ,
@name as char(10),
@pro as char(10)
as
begin
declare @sql as char(100)
set @sql=''
set @sql = 'update test set ' + @name + ' = 1 ,'+@pro+'=1 where id = ' + cast(@id as varchar)
exec(@sql)
end
GO
@id as char(10) ,
@name as char(10),
@pro as char(10)
as
begin
declare @sql as char(100)
set @sql = 'update test set ' + @name + ' = 1 ,'+@pro+'=1 where id = ''' + @id +''''
exec(@sql)
end
这位大哥,那天就是你帮我解决的,现在我看了看数据库,已经修改成功了,就是会提示错误
如果不用存储过程能实现吗?
就像这样:
string id = Request.Form["YX_CH"];
string name = this.DropDownList1.SelectedValue.ToString();
string pro = this.DropDownList2.SelectedValue.ToString();
SqlConnection conn = new SqlConnection(System.Configuration.ConfigurationManager.AppSettings["ConnectionString"]);
conn.Open();
string sql = "update test set ' + @name + ' = 1 ,'+ @pro + '=1 where id = ' + cast(@id as varchar) ";
SqlCommand cmd = new SqlCommand(sql, conn);
cmd.ExecuteNonQuery();
COMP.Jscript.AlertAndRedirect("修改成功!", "Default.aspx");
conn.Close();
我用的:
set @sql = 'update test set ' + @name + ' = 1 ,'+@pro+'=1 where id = ' + cast(@id as varchar)
已经修改成功了,只是提示的错误应该是代码哪里错了吧?
要是存储过程错了,修改不成功吧
存储过程是没有问题的,关键是你的c#代码写错了。GridView1.DataSource = mm.Utest(id.ToString(), name.ToString(), pro.ToString()).Tables[0].DefaultView;
这个地方。你这里执行的语句是修改,只能返回受影响的行数。
Utest方法却还返回DataSet,这不胡扯吗?
而且还绑定到GridView上面。oh, my god!
把你的c#改了。类似protected void btnOk_Click(object sender, EventArgs e)
{
DataBindB();
}
public void DataBindB()
{
string id = Request.Form["YX_CH"];
string name = this.DropDownList1.SelectedValue.ToString();
string pro = this.DropDownList2.SelectedValue.ToString();
if( mm.Utest(id.ToString(), name.ToString(), pro.ToString())>0)
{
Jscript.AlertAndRedirect("修改成功!!", "111.aspx");
}
}
Utest方法为:
public int Utest(string id,string name, string pro) //修改返回值
{ SqlParameter[] signInPara = {
new SqlParameter("@id", id),
new SqlParameter("@name", name),
new SqlParameter("@pro",pro)
};
return DAL.SqlHelper.ExecuteDataset(DAL.SqlHelper.CONN_STRING, //把这个地方换成你的SqlHelper类中的执行返回受影响行数的方法,即ExecuteNonQuery这样的方法。可能你的SqlHelper类中的方法名并不叫这个。
CommandType.StoredProcedure, "Utest", signInPara);
}