5

在这里,我在数据库中动态创建表。用户根据自己的意愿输入名称并选择语言单选按钮。所以问题是在执行 cmd.ExecuteNonQuery 之后,我整数的值从 0 变为 -1。并显示该表无法创建,但是当我转到数据库时,它已经成功创建。请让我知道我在哪里做错了。提前感谢!

protected void btnpaper_Click(object sender, EventArgs e)
    {
        try
        {                
                string conn = ConfigurationManager.ConnectionStrings["sqlconn"].ConnectionString;
                SqlConnection con = new SqlConnection(conn);
                con.Open();
                char[] arr = new char[] {'n','g','l','i','s','h'};
                string str = "CREATE TABLE " + Label1.Text.Trim() + 
                             txtpaperset.Text.Trim()+ rbtnEng.Text.TrimEnd(arr) +
                             "(" + "quesNo int NOT NULL PRIMARY KEY, " + 
                             "question varchar(1000) NOT NULL," + 
                             "ansA varchar(500) NOT NULL, " + 
                             "ansB varchar(500) NOT NULL, " + 
                             "ansC varchar(500) NOT NULL, " + 
                             "ansD varchar(500) NOT NULL, " + 
                             "rightAns varchar(50) NOT NULL " + ")";                    
                SqlCommand cmd = new SqlCommand(str, con);
                int i = cmd.ExecuteNonQuery();
                if (i > 0)
                {
                    lblerrormsg.Visible = true;
                    con.Close();
                }
                else
                {
                    lblerrormsg.Text = "Table Not Created Please Try with Different Name!";                        
                    con.Close();
                }                

        }
        catch (System.Exception excep)
        {
            MessageBox.Show(excep.Message);
        }      
    }
4

4 回答 4

9

取自 MSDN Remarks on SqlCommand.ExecuteNonQuery

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

于 2012-07-23T20:24:31.123 回答
7

SqlCommand.ExecuteNonQuery来自(强调我的)的文档:

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

您的语句是 UPDATE、INSERT 还是 DELETE 语句?没有。因此你得到-1。

不清楚i“从” 0 到 -1 的值是什么意思。它永远不是 0。它没有,直到它从ExecuteNonQuery.

于 2012-07-23T20:24:04.060 回答
0

是设计使然吗?

http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlcommand.executenonquery.aspx

并且:

cmd.executenonquery 在 vb.net windows 应用程序中返回 -1

你是说你得到-1,对吗?

编辑:要回答您问题的最后一部分,请参阅:

检查 SQL Server 中是否存在表

于 2012-07-23T20:27:54.980 回答
-2

公共共享函数 Insert(ByVal SProcedure As String, ByVal parameters() As SqlParameter) As Boolean Using cnn As New SqlConnection(Emplooyes) 试试

            Dim cmd As SqlCommand = New SqlCommand(SProcedure, cnn)
            cmd.CommandType = CommandType.StoredProcedure
            cmd.Parameters.AddRange(parameters)

            If cnn.State = ConnectionState.Closed Then
                cnn.Open()
            End If

            Dim Ls As Integer
            Ls= cmd.ExecuteNonQuery()
            If Ls = -1 Then
                Return False
            Else
                Return True
            End If

        Catch ex As Exception
            Return False
        Finally
            cnn.Close()
        End Try
    End Using
End Function
于 2013-04-01T02:40:04.453 回答