【问题标题】:C# Database Insert (ASP.NET) - ExecuteNonQuery: CommandText property has not been initializedC# 数据库插入 (ASP.NET) - ExecuteNonQuery:CommandText 属性尚未初始化
【发布时间】:2011-04-30 00:00:48
【问题描述】:

我第一次从 ASP.NET/C# 进行插入时遇到了一个小问题。每次运行此代码时,我都会收到以下错误:“ ExecuteNonQuery:CommandText 属性尚未初始化” 有谁知道这是什么意思以及我如何解决它?

提前致谢!

string sqlQuery = "INSERT INTO ATI_LOG_IO (Date, Connect_Time, Disconnect_Time, ATI_Rep, Reason_For_Access, Property_Contact, Case_Number, Comments, Property_ID)";
sqlQuery += "VALUES (@Today, @Connect, @Disconnect, @Rep, @Reason, @Contact, @CaseNum, @Comments, @PropertyID)";
using (SqlConnection dataConnection = new SqlConnection(connectionString))
{
    using (SqlCommand dataCommand = dataConnection.CreateCommand())
    {
        dataConnection.Open();
        dataCommand.CommandType = CommandType.Text;
        dataCommand.CommandText = sqlQuery;
        dataCommand.Parameters.Add("@Today", DateTime.Today.ToString());
        dataCommand.Parameters.Add("@Connect", txtInDate.Text + " " + fromHrs.Text + ":" + fromMins.Text + ":00");
        dataCommand.Parameters.Add("@Disconnect", txtOutdate.Text + " " + toHrs.Text + ":" + fromMins.Text + ":00");
        dataCommand.Parameters.Add("@Rep", repID);
        dataCommand.Parameters.Add("@Reason", txtReason.Text);
        dataCommand.Parameters.Add("@Contact", txtContact.Text);
        dataCommand.Parameters.Add("@CaseNum", txtCaseNum.Text);
        dataCommand.Parameters.Add("@Comments", txtComments.Text);
        dataCommand.Parameters.Add("@PropertyID", lstProperties.SelectedValue);
        dataCommand.ExecuteNonQuery();
        dataConnection.Close();
    }
}

【问题讨论】:

标签: c# asp.net sql database


【解决方案1】:
string sqlQuery = "INSERT INTO ATI_LOG_IO (Date, Connect_Time, Disconnect_Time, ATI_Rep, Reason_For_Access, Property_Contact, Case_Number, Comments, Property_ID)";
sqlQuery += " VALUES (@Today, @Connect, @Disconnect, @Rep, @Reason, @Contact, @CaseNum, @Comments, @PropertyID)";
using (SqlConnection dataConnection = new SqlConnection(connectionString))
{
    using (SqlCommand dataCommand = new SqlCommand(sqlQuery, dataConnection))
    {
        dataCommand.Parameters.AddWithValue("Today", DateTime.Today.ToString());
        dataCommand.Parameters.AddWithValue("Connect", txtInDate.Text + " " + fromHrs.Text + ":" + fromMins.Text + ":00");
        dataCommand.Parameters.AddWithValue("Disconnect", txtOutdate.Text + " " + toHrs.Text + ":" + fromMins.Text + ":00");
        dataCommand.Parameters.AddWithValue("Rep", repID);
        dataCommand.Parameters.AddWithValue("Reason", txtReason.Text);
        dataCommand.Parameters.AddWithValue("Contact", txtContact.Text);
        dataCommand.Parameters.AddWithValue("CaseNum", txtCaseNum.Text);
        dataCommand.Parameters.AddWithValue("Comments", txtComments.Text);
        dataCommand.Parameters.AddWithValue("PropertyID", lstProperties.SelectedValue);

        dataConnection.Open();
        dataCommand.ExecuteNonQuery();
        dataConnection.Close();
    }
}

复制粘贴就可以了

【讨论】:

  • 所以从外观上看,您已经使用上述建议修复了我的代码,我得到了这么多,但是(对不起,如果这是一个菜鸟问题)Parameters.Add 和Parameters 之间有什么区别。 AddWithValue - 是我的原始@sa 偏好结果的遗漏还是我一开始就错误地使用它们?
  • 我只使用了传入预实例化参数的方法的Parameters.Add(SqlParameter)重载。您使用的重载目前已被 Microsoft 淘汰。在过去,我也从未成功使用它。至于@符号,在VB中我必须用@符号指定参数名称,当使用AddWithValue方法时,但在C#中它不是必需的,但我认为你仍然可以使用带有参数名称的@符号得到相同的结果。如果您更愿意使用 Parameters.Add,请使用 Parameters.Add(String Name, SqlDbType Type) 重载,然后将值作为 Parameters["@Name"].Value=Value 传入
  • 这似乎已经解决了。现在我收到一个关于该表没有 INSERT 权限的错误,这是我自己的愚蠢错误,至少我知道如何修复那个:)
【解决方案2】:

这通常意味着您没有设置 CommandText 属性,但在您的情况下,您已经设置了。

您应该尝试测试该行的 sqlQuery 字符串实际上不为空:

dataCommand.CommandText = sqlQuery;

附:作为“最佳实践”,您可能需要考虑在设置 SqlCommand 对象之后打开连接,以最大限度地减少打开连接所花费的时间:

    dataCommand.CommandType = CommandType.Text;
    dataCommand.CommandText = sqlQuery;
    dataCommand.Parameters.Add("@Today", DateTime.Today.ToString());
    //...
    dataConnection.Open();
    dataCommand.ExecuteNonQuery();
    dataConnection.Close();

【讨论】:

  • 我尝试在设置对象之前和之后打开它,以防它与错误有关,忘记在发布代码之前将其移回。不过感谢您的提示:)
【解决方案3】:

查看您的字符串 sql 查询,您不会在“INTO”部分和“VALUES”部分之间留下空格。

...............Property_ID)";
sqlQuery += "VALUES (@Today, ..............

应该是:

...............Property_ID)";
sqlQuery += " VALUES (@Today, ..............

【讨论】:

  • 天哪,这肯定会导致一些问题。知道它是否会导致这个特定问题吗? dataCommand 是否在发送之前实际解析 SQL,或者一旦我修复 this 错误的原因,它是否会导致返回 SQL 错误?
猜你喜欢
  • 2012-02-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-26
相关资源
最近更新 更多