问个问题,请知道的朋友解答
小弟正在学习做系统.这几天出现了这样一个问题.我把问题简单写一下,请各位高手解答,谢谢.
数据库TestNewsDB中NewsKinds表中有3个字段
其中NewsKindID字段是主键,int类型,长度是4.(注意,是INT型可能问题在这里)
其他字段对程序没有影响,我就省略了.
页面上只有两个控件,一个ListBox,id:ListBox1.一个Button1,id:Button1
page_load事件(这个对问题没影响,我只是为了叫大家看明白后面的程序.)
if(!this.IsPostBack)
{this.BindNewsKindData();}
}
private void BindNewsKindData()
{
this.ListBox1.Items.Clear();
SqlConnection con=new SqlConnection("server=.;uid=sa;pwd=;database=TestNewsDB");
con.Open();
SqlCommand cmd=new SqlCommand("select * from NewsKinds order by KindOrder",con);
SqlDataReader sdr=cmd.ExecuteReader();
this.ListBox1.DataSource=sdr;
this.ListBox1.DataTextField="KindName";
this.ListBox1.DataValueField="NewsKindID";
this.ListBox1.DataBind();
con.Close();
sdr.Close();
问题出在这里button1的点击事件(以下是能删除成功的)
if(this.ListBox1.SelectedIndex>-1)
{
SqlConnection con=new SqlConnection("server=.;uid=sa;pwd=;database=TestNewsDB");
con.Open();
SqlCommand cmd=new SqlCommand("delete from NewsKinds where NewsKindID='"+this.ListBox1.SelectedValue+"'",con);
cmd.ExecuteNonQuery();
con.Close();
this.BindNewsKindData();
但是我改成我习惯用的写法
SqlConnection con=new SqlConnection("server=.;uid=sa;pwd=;database=TestNewsDB");
con.Open();
SqlCommand cmd=new SqlCommand("delete form NewsKinds where NewsKindID=@id",con);
cmd.Parameters.Add(new SqlParameter("@id",SqlDbType.Int,4));
cmd.Parameters["@id"].Value=this.ListBox1.SelectedValue;
cmd.ExecuteNonQuery();
con.Close();
this.BindNewsKindData();
这样运行不出结果来.
因为this.ListBox1.SelectedValue是string类型.(我做的工程里面这么提示)我就把中间的几行改成
SqlCommand cmd=new SqlCommand("delete form NewsKinds where NewsKindID=@id",con);
cmd.Parameters.Add(new SqlParameter("@id",SqlDbType.VarChar,4));
cmd.Parameters["@id"].Value=this.ListBox1.SelectedValue;
还是不行.请高手告诉我怎么用@id这种形式写这段程序.因为我的系统挺大,连接字符串要放在类里面.第1种写法不方便.