c#-如果已创建SQL查询,则在文本框上显示消息
我正在用c#编写一个程序,当我按下一个按钮时,它将生成SQL表到我的SQL server数据库。如果已成功创建表,则消息应显示在我的程序的大文本框屏幕上,否则它应在文本框屏幕上显示错误消息 到目前为止,一切正常,但无论我按下按钮多少次,它都会在屏幕上不断弹出相同的显示消息(表已创建)。 我只希望在我的数据库中还不存在该表时(成功)显示该消息。如果表已经存在,它应该在屏幕上显示一条错误消息。我正在考虑使用while语句,但不知道它是如何解决的 这是我的密码:c#-如果已创建SQL查询,则在文本框上显示消息,c#,sql-server,visual-studio,C#,Sql Server,Visual Studio,我正在用c#编写一个程序,当我按下一个按钮时,它将生成SQL表到我的SQL server数据库。如果已成功创建表,则消息应显示在我的程序的大文本框屏幕上,否则它应在文本框屏幕上显示错误消息 到目前为止,一切正常,但无论我按下按钮多少次,它都会在屏幕上不断弹出相同的显示消息(表已创建)。 我只希望在我的数据库中还不存在该表时(成功)显示该消息。如果表已经存在,它应该在屏幕上显示一条错误消息。我正在考虑使用while语句,但不知道它是如何解决的 这是我的密码: private void btnCre
private void btnCreateTables_Click(object sender, EventArgs e)
{
string query = "IF OBJECT_ID('dbo.AuditCardTypeBenefit_TEST','U') IS NULL ";
query += "BEGIN ";
query += "CREATE TABLE[dbo].[AuditCardTypeBenefit_TEST]( ";
query += "[AuditID] [decimal](18, 0) IDENTITY(1,1) NOT NULL, ";
query += "[AuditType] [char](5) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL, ";
query += "[CardTypeBenefitID] [decimal](18, 0) NOT NULL, ";
query += "[EventCode] [varchar](8) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL, ";
query += "[CardTypeGroupID] [varchar](5) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, ";
query += "[AgeFrom] [int] NULL, ";
query += "[AgeTo] [int] NULL, ";
query += "[Gender] [char](1) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, ";
query += "[CreateBy] [nvarchar](128) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL, ";
query += "[CreateDate] [datetime] NOT NULL, ";
query += "[Status] [char](2) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL, ";
query += "[CancelReason] [varchar](250) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL, ";
query += "[LastChangeBy] [nvarchar](128) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL, ";
query += "[LastChangeDate] [datetime] NOT NULL, ";
query += "[RecordVersion] [timestamp] NOT NULL ";
query += ") ON [PRIMARY] ";
query += "END ";
string constr = ConfigurationManager.ConnectionStrings["constr"].ConnectionString;
try
{
using (SqlConnection con = new SqlConnection(constr))
{
using (SqlCommand cmd = new SqlCommand(query))
{
cmd.Connection = con;
con.Open();
cmd.ExecuteNonQuery();
Display("AuditCardTypeBenefit_Test table has been created successfully");
con.Close();
}
}
}
catch(Exception ex)
{
MessageBox.Show(ex.Message);
textBox1.AppendText(string.Format("{0}", Environment.NewLine));
textBox1.AppendText(string.Format("{0} MainPage_Load() exception - {1}{2}", _strThisAppName, ex.Message, Environment.NewLine));
Debug.WriteLine(string.Format("{0} MainPage_Load() exception - {1}", _strThisAppName, ex.Message));
}
注意:Display方法负责将消息显示到屏幕。方法返回受影响的行数 对于UPDATE、INSERT和DELETE语句,返回值是受命令影响的行数。当插入或更新的表上存在触发器时,返回值包括受插入或更新操作影响的行数以及受触发器影响的行数对于所有其他类型的语句,返回值为-1。如果发生回滚,则返回值也为-1 也许做
if (cmd.ExecuteNoneQuery() == -1)
Display("AuditCardTypeBenefit_Test table has been created successfully");
con.Close();
能解决你的问题吗?不知道创建表时是否只返回0,这只是一个建议。
SqlCommand.ExecuteNonQuery()
方法返回受影响的行数
对于UPDATE、INSERT和DELETE语句,返回值是受命令影响的行数。当插入或更新的表上存在触发器时,返回值包括受插入或更新操作影响的行数以及受触发器影响的行数对于所有其他类型的语句,返回值为-1。如果发生回滚,则返回值也为-1
也许做
if (cmd.ExecuteNoneQuery() == -1)
Display("AuditCardTypeBenefit_Test table has been created successfully");
con.Close();
能解决你的问题吗?不知道创建表时是否只返回0,这只是一个建议。无论我按按钮多少次,它都会在屏幕上不断弹出相同的显示消息相同的消息是什么意思?哪条消息?你打算用while语句做什么?消息“AuditCardTypeBenefit\u Test table已成功创建”实际上我越想它,它实际上就不可能了,因为我的查询指出,如果表不存在,请创建表。这种情况将始终确保我的sql查询执行时不会出现任何错误,因为它会检查我的数据库中是否有同名的表。无论我按下按钮多少次,它都会在屏幕上不断弹出相同的显示消息相同的消息是什么意思?哪条消息?你打算用while语句做什么?消息“AuditCardTypeBenefit\u Test table已成功创建”实际上我越想它,它实际上就不可能了,因为我的查询指出,如果表不存在,请创建表。这种情况将始终确保我的sql查询执行时不会出现任何错误,因为它会检查我的数据库中是否有同名的表。我将尝试一下,这是运行sql查询的一种好做法吗?由于我有多个SQL脚本文件,所以我考虑执行这些文件,而不是用c#硬编码这些查询。想象一下,如果我有50个sql脚本,并且我必须在代码中包含这些脚本,这将是一件乏味的事情。我尝试了你的代码,但仍然是相同的问题。当表已经存在于我的sql server中时,它仍然会生成该消息。它不应该这样做。我不会说它的好或坏的做法,这在很大程度上取决于情况。有时需要动态创建表。但是,如果您有脚本文件,并且不需要从应用程序生成表,那么为什么不使用它们呢?使用它们是什么意思?我将尝试一下,这是运行sql查询的良好实践吗?由于我有多个SQL脚本文件,所以我考虑执行这些文件,而不是用c#硬编码这些查询。想象一下,如果我有50个sql脚本,并且我必须在代码中包含这些脚本,这将是一件乏味的事情。我尝试了你的代码,但仍然是相同的问题。当表已经存在于我的sql server中时,它仍然会生成该消息。它不应该这样做。我不会说它的好或坏的做法,这在很大程度上取决于情况。有时需要动态创建表。但是,如果您有脚本文件,并且不需要从应用程序生成表,那么为什么不使用它们呢?使用它们是什么意思?