Here i create table in database dynamically.
User enters name as his wish and selects language radiobutton.
So problem is after executing cmd.ExecuteNonQuery value of i integer is going -1 from 0. And shows that table couldnt be created but when i go to database its already created successfully. Please let me know where i am doing wrong. Thanx in Advance !!
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);
}
}
Answers:
Thank you for visiting the Q&A section on Magenaut. Please note that all the answers may not help you solve the issue immediately. So please treat them as advisements. If you found the post helpful (or not), leave a comment & I’ll get back to you as soon as possible.
Method 1
Takes from MSDN Remarks on SqlCommand.ExecuteNonQuery
For UPDATE, INSERT, and DELETE statements, the return value is the
number of rows affected by the command. When a trigger exists on a
table being inserted or updated, the return value includes the number
of rows affected by both the insert or update operation and the number
of rows affected by the trigger or triggers. For all other types of
statements, the return value is -1. If a rollback occurs, the return
value is also -1.
Method 2
From the docs for SqlCommand.ExecuteNonQuery (emphasis mine):
For UPDATE, INSERT, and DELETE statements, the return value is the number of rows affected by the command. When a trigger exists on a table being inserted or updated, the return value includes the number of rows affected by both the insert or update operation and the number of rows affected by the trigger or triggers. For all other types of statements, the return value is -1. If a rollback occurs, the return value is also -1.
Is your statement an UPDATE, INSERT or DELETE statement? Nope. Hence you’re getting -1.
It’s not clear what you mean by the value of i going to -1 “from” 0. It’s never 0. It doesn’t have a value until it’s assigned one from the result of ExecuteNonQuery.
Method 3
Is it by design?
http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlcommand.executenonquery.aspx
and also:
cmd.executenonquery is returning -1 in vb.net windows application
You are saying you’re getting -1, correct?
edit: to answer the last part of your question, see this:
Check if table exists in SQL Server
Method 4
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
All methods was sourced from stackoverflow.com or stackexchange.com, is licensed under cc by-sa 2.5, cc by-sa 3.0 and cc by-sa 4.0