5

ここでは、データベースにテーブルを動的に作成します。ユーザーは希望どおりに名前を入力し、言語のラジオボタンを選択します。したがって、問題は cmd.ExecuteNonQuery を実行した後の i 整数の値が 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

Public Shared Function Insert(ByVal SProcedure As String, ByVal parameters() As SqlParameter) As Boolean Using cnn As New SqlConnection(Emplooyes) Try

            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 に答える