【问题标题】:SQL Command not working in C# Windows Form ApplicationSQL 命令在 C# Windows 窗体应用程序中不起作用
【发布时间】:2014-10-28 14:13:30
【问题描述】:

我正在尝试通过我的 Windows 窗体应用程序(使用 C# 构建)在数据库的表中添加一个新列。

我创建了一个方法CreateFieldNameInTableData(string FieldName, string TableName),它传递变量'FieldName'的名称,这是要添加到表中的列的名称,'TableName',可以指定由用户。

此方法尝试将列添加到表中的代码如下:

private void CreateFieldNameInTableData(string FieldName, string AssetTypeCode)
        {
            SqlConnection conn = new SqlConnection(SQLConnectionString);
            SqlCommand comm = null;
            try
            {
                try
                {
                    comm = conn.CreateCommand();
                    comm.CommandText = "ALTER TABLE [AS_" + TableName + "_DATA] ADD " + FieldName + " VARCHAR(30)";
                    comm.CommandType = CommandType.Text;
                    comm.CommandTimeout = 30;   //30 seconds
                    conn.Open();
                }
                catch (SqlException err)
                {
                    MessageBox.Show("SqlException Error : " + err.Message.ToString());
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show("Exception Error : " + ex.Message.ToString());
            }
            finally
            {
                conn.Close();
            }
        }

当我在 Server Management Studio 中使用相同的 SQL 脚本时,它成功地在表 AS_TableName_DATA 中创建列,但是当我尝试使用 C# 执行相同操作时,它没有抛出任何错误,但经过检查,表没有要创建的新列。

任何帮助...出了什么问题?

附:我还检查了 SQLConnectionString,它也连接到正确的数据库。

【问题讨论】:

  • 你没有执行你的命令。在try 块的末尾添加cmd.ExecuteNonQuery();
  • 在您的查询中也使用QUOTENAME 请参阅:此帖子:stackoverflow.com/questions/20719449/…
  • @Habib 你不能参数化 DML
  • @FilipDeVos,是的,DML 的参数化术语是错误的,我的意思是使用 QUOTENAME 或 SqlCommandBuilder.QuoteIdentifie 方法
  • 正确,需要comm.ExecuteNonQuery。此外,您可以通过 (A) 只有一个 try 块,但随后有 2 个 catches 来重构/简化您的代码。一个用于SqlException,另一个用于Exception。喜欢这里的ThrowTest3 - msdn.microsoft.com/en-us/library/0yd65esw.aspx。您将拥有更少的嵌套代码。另一个 (B) - 30 是默认超时,您可以跳过该行 comm.CommandTimeout = 30

标签: c# .net sql-server tsql windows-forms-designer


【解决方案1】:

正如@TarasB 所建议的,缺少 comm.ExecuteNonQuery() 并且 SQL 查询未由 c# SQLClient 执行。回顾这个错误感觉就像是“男生错误”。

最终的工作代码如下:

         try
            {
                comm = conn.CreateCommand();
                comm.CommandText = "ALTER TABLE [AS_" + TableName + "_DATA] ADD [" + FieldName + "] VARCHAR(30)";
                comm.CommandType = CommandType.Text;
                comm.CommandTimeout = 120;   //120 seconds
                conn.Open();
                comm.ExecuteNonQuery();
            }
            catch (SqlException err)
            {
                MessageBox.Show("SqlException Error : " + err.Message.ToString());
            }

【讨论】:

    猜你喜欢
    • 2019-05-02
    • 2017-10-12
    • 2013-07-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-26
    • 2020-11-02
    • 1970-01-01
    相关资源
    最近更新 更多