关于SQL语句中使用变量的问题

用C#写了一段向MySQL数据库里面插入一个Record的代码,
数据库里面的表名是meetingevents,代码如下:

System.Data.Odbc.OdbcConnection connection = new System.Data.Odbc.OdbcConnection( ConfigurationManager.ConnectionStrings["ConnectionOne"].ConnectionString );

System.Data.Odbc.OdbcCommand insertCommand = new System.Data.Odbc.OdbcCommand( "INSERT INTO meetingevents (Name, EventName, Room, AttendeeList, DateTime) VALUES (@Name, @EventName, @Room, @AttendeeList, @DateTime)", connection );

insertCommand.Parameters.AddWithValue( "Name", eventBox.Text );
insertCommand.Parameters.AddWithValue("EventName", eventBox.Text );
insertCommand.Parameters.AddWithValue( "Room", roomList.SelectedValue );
insertCommand.Parameters.AddWithValue( "AttendeeList", strAttendee );
insertCommand.Parameters.AddWithValue( "DateTime", CalendarData.SelectedDate );

connection.Open();
int queryResult = insertCommand.ExecuteNonQuery();
connection.Close();

但是插入的总是空值,我觉得是SQL语句中变量定义有问题,请各位高手指点一下,多谢了!!!

插入进去的数据的类型不匹配. 以int型和nvarchar型为例,其他的像日期型的你自己发挥.

问:
存储过程这样的:
CREATE PROCEDURE insertxuesheng @xuehao int,@xingming varchar,@banji varchar,@zhuanye varchar,@nianling int,@xingbie varchar AS
insert 学生(学号,姓名,班级,专业,年龄,性别) values(@xuehao,@xingming,@banji,@zhuanye,@nianling,@xingbie)
代码这样的:
SqlCommand cmd = new SqlCommand("insertxuesheng", conn);
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.AddWithValue("@xuehao", TextBox1.Text);
cmd.Parameters.AddWithValue("@xingming",TextBox2.Text);
cmd.Parameters.AddWithValue("@banji", TextBox3.Text);
cmd.Parameters.AddWithValue("@zhuanye", TextBox4.Text);
cmd.Parameters.AddWithValue("@nianling", TextBox5.Text);
cmd.Parameters.AddWithValue("@xingbie", TextBox6.Text);
cmd.ExecuteNonQuery();

插入数据后我去看数据库里的表,发现只有学号和年龄有数据,其他都是空值,怎么回事

答:
传入的数据类型不对.

因为学号和年龄是int型,所以传入TextBoxN.Text可以. 因为这时TextBoxN.Text = " 123", 实际上的SQL语句中就是:xuehao=123

而针对其他的字段,则都是字符型的,因此 在SQL语句中应该是: xingming = 'abc' .

而:cmd.Parameters.AddWithValue("@xingming",TextBox2.Text);
执行的结果是: xingming=abc.这当然就不行啦.

所以改为: cmd.Parameters.AddWithValue("@xingming","'" + TextBox2.Text + "'"); 就是给TextBoxN.Text前后各加一个引号再传给存储过程.
温馨提示:内容为网友见解,仅供参考
无其他回答
相似回答
大家正在搜