c#alter table name add column

时间:2014-04-28 12:01:44

标签: c# sql sql-server-express

命令执行成功,请看这里,..

string strConn = "Data Source=USER\\SQLExpress; Initial Catalog=empdata; Integrated Security=true";
        SqlConnection conn = new SqlConnection(strConn);
        conn.Open();

        SqlCommand sqlCmd = new SqlCommand("alter table empreg ADD '"+ this.comboBox1.Text +"' varchar(50)", conn);

        int res=sqlCmd.ExecuteNonQuery();
        if (res == 1)
        { MessageBox.Show("New column created"); }
        else
        { MessageBox.Show("sorry unable to create"); }

但它是第二部分,如果“抱歉无法创建”结果,那就是在SQL工作室我们可以看到创建的列。 怎么可能???

5 个答案:

答案 0 :(得分:1)

您的结果是受影响的行数量,1并不意味着您收到了错误。

http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlcommand.executenonquery%28v=vs.110%29.aspx

  

对于UPDATE,INSERT和DELETE语句,返回值为   受命令影响的行数。当a上存在触发器时   正在插入或更新的表,返回值包括数字   受插入或更新操作影响的行数和数字   受触发器或触发器影响的行数。对于所有其他类型的   语句,返回值为-1。如果发生回滚,则返回   值也是-1。

答案 1 :(得分:1)

来自MSDN页面:

"对于UPDATE,INSERT和DELETE语句,返回值是受命令影响的行数。当插入或更新的表上存在触发器时,返回值包括插入或更新操作影响的行数以及受触发器或触发器影响的行数。对于所有其他类型的语句,返回值为-1。如果发生回滚,则返回值也为-1。"

你需要处理res == - 1,而不是res == 1

答案 2 :(得分:1)

来自http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlcommand.executenonquery(v=vs.110).aspx

  

对于UPDATE,INSERT和DELETE语句,返回值为   受命令影响的行数。当a上存在触发器时   正在插入或更新的表,返回值包括数字   受插入或更新操作影响的行数和数字   受触发器或触发器影响的行数。 适用于所有其他类型的   语句,返回值为-1 。如果发生回滚,则返回   值也是-1。

答案 3 :(得分:0)

SqlCommand.ExecuteNonQuery => “对连接执行Transact-SQL语句并返回受影响的行数。”

它将始终返回已更改的行数

了解更多SqlCommand.ExecuteNonQuery

答案 4 :(得分:-1)

qlCommand sqlCmd = new SqlCommand(“alter table empreg ADD'”+ this.comboBox1.Text +“'varchar(50)”,conn);

正确

qlCommand sqlCmd = new SqlCommand(“alter table empreg ADD”+ this.comboBox1.Text +“varchar(50)”,conn);

并且不需要

    if (res == 1)
    { MessageBox.Show("New column created"); }
    else
    { MessageBox.Show("sorry unable to create"); }