积极答复者
高手帮忙检查代码,错误“参数@szym没有默认值”

问题
-
代码:
string sql = ""; sql = "insert into tmb(tm,zjmc,tmlx,daa,dab,dac,zqda,szym) values(@tm,@zjmc,@tmlx,@daa,@dab,@dac,@zqda,@szym)"; OleDbConnection cn = new OleDbConnection(@"provider = microsoft.jet.oledb.4.0; data source = " + frm_main.pub_datapath + ";jet oledb:database password=" + frm_main.pub_datapwd); OleDbCommand cmd = new OleDbCommand(sql, cn); cn.Open(); cmd.Parameters.Add("@daa", OleDbType.Char); cmd.Parameters["@daa"].Value = txt_daa.Text; cmd.Parameters.Add("@dab", OleDbType.Char); cmd.Parameters["@dab"].Value = txt_dab.Text; cmd.Parameters.Add("@dac", OleDbType.Char); cmd.Parameters["@dac"].Value = txt_dac.Text; cmd.Parameters.Add("@tmlx", OleDbType.Char); cmd.Parameters["@tmlx"].Value = "1"; cmd.Parameters.Add("@tm", OleDbType.Char); cmd.Parameters["@tm"].Value = textBox1.Text; cmd.Parameters.Add("@zjmc", OleDbType.Char); cmd.Parameters["@zjmc"].Value = comboBox2.SelectedItem.ToString().Substring(0, 3); cmd.Parameters.Add("@szym", OleDbType.Char); cmd.Parameters["@szym"].Value = textBox2.Text; cmd.Parameters.Add("@zqda", OleDbType.Char); cmd.Parameters["@zqda"].Value = "z"; cmd.ExecuteNonQuery();//执行到这里出错!“参数@szym没有默认值” cn.Close();
下图是数据库:
执行到最后提示“参数@szym没有默认值”是怎么回事?
C#初学者!~~~
答案
-
1)char:定长的字符串(比如长度是10,那么如果输入的字符串实际个数小于10,那么末尾会空格补充;且2个(英文)字符=一个汉字,长度“10”是英文字符的总个数)。
varwchar:变长Unicode字符串(一个字符=一个汉字),因此定义的长度等于实际最大的长度;并且因为是Unicode,因此如果实际长度小于定义的长度,末尾不会产生空格)。
2)依次判断吧:
string insertStatement = "insert into("; string parameters = "values("; List<OleDbParameter> oleparameters = new List<OleDbParameter>(); OleDbCommand cmd = new OleDbCommand (); if(CheckBox1.Checked) { insertStatement+="字段1"; parameters+="@字段1"; oleparameters.Add(new OleDbParameter{ParameterName="@字段1",Value=TextBox1.Text); } if(CheckBox2.Checked) { insertStatement+=",字段2"; parameters+=",@字段2"; oleparameters.Add(new OleDbParameter{ParameterName="@字段1",Value=TextBox2.Text); } ……………… insertStatement+=")"; parameters+=")"; cmd.CommandText=insertStatement+parameters; foreach(OledbParameter p in oleparameters) { cmd.Parameters.Add(p); } cmd.ExecuteNonQuery(); …………
- 已标记为答案 呆oO 2012年5月13日 7:16
全部回复
-
1)char:定长的字符串(比如长度是10,那么如果输入的字符串实际个数小于10,那么末尾会空格补充;且2个(英文)字符=一个汉字,长度“10”是英文字符的总个数)。
varwchar:变长Unicode字符串(一个字符=一个汉字),因此定义的长度等于实际最大的长度;并且因为是Unicode,因此如果实际长度小于定义的长度,末尾不会产生空格)。
2)依次判断吧:
string insertStatement = "insert into("; string parameters = "values("; List<OleDbParameter> oleparameters = new List<OleDbParameter>(); OleDbCommand cmd = new OleDbCommand (); if(CheckBox1.Checked) { insertStatement+="字段1"; parameters+="@字段1"; oleparameters.Add(new OleDbParameter{ParameterName="@字段1",Value=TextBox1.Text); } if(CheckBox2.Checked) { insertStatement+=",字段2"; parameters+=",@字段2"; oleparameters.Add(new OleDbParameter{ParameterName="@字段1",Value=TextBox2.Text); } ……………… insertStatement+=")"; parameters+=")"; cmd.CommandText=insertStatement+parameters; foreach(OledbParameter p in oleparameters) { cmd.Parameters.Add(p); } cmd.ExecuteNonQuery(); …………
- 已标记为答案 呆oO 2012年5月13日 7:16