C#数据库插入(ASP.NET)-ExecuteOnQuery:CommandText属性尚未初始化

C#数据库插入(ASP.NET)-ExecuteOnQuery:CommandText属性尚未初始化,c#,asp.net,sql,database,C#,Asp.net,Sql,Database,我第一次从ASP.NET/C插入时遇到了一个小问题。每次运行此代码时,我都会遇到以下错误:“ExecuteOnQuery:CommandText属性尚未初始化”有人知道这意味着什么以及我如何修复它吗 提前谢谢 string sqlQuery = "INSERT INTO ATI_LOG_IO (Date, Connect_Time, Disconnect_Time, ATI_Rep, Reason_For_Access, Property_Contact, Case_Number, Commen

我第一次从ASP.NET/C插入时遇到了一个小问题。每次运行此代码时,我都会遇到以下错误:“ExecuteOnQuery: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();
    }
}

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

您应该尝试在以下行测试sqlQuery字符串是否实际为空:

dataCommand.CommandText = sqlQuery;

.S.作为一个“最佳实践”,您可能需要考虑在设置Sql命令对象之后打开连接,以最小化与打开连接花费的时间:

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

复制粘贴应该做到这一点

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

应该是:

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

我在设置对象之前和之后都尝试过打开它,以防它与错误有关,在发布代码之前忘记将其移回。不过谢谢你的提示:)哦,天哪,那肯定会引起一些问题。你知道这会不会导致这个问题吗?dataCommand在发送SQL之前是否真的解析了SQL,或者在我修复了导致此错误的原因后,它是否会导致返回SQL错误?因此,从外观上看,您已经用上述建议修复了我的代码,我得到了这么多,但是(如果这是一个noob问题,请抱歉)Parameters.Add和Parameters.AddWithValue之间的区别是什么?省略我的原始@s是首选项的结果,还是我一开始使用它们就出错了?我只使用了Parameters.Add(SqlParameter)重载传入预实例化参数的方法。您使用的重载当前已被Microsoft淘汰。在过去,我也从未成功地使用过它。至于@符号,在VB中,当使用AddWithValue方法时,我必须用@符号指定参数名,但在C#中,这不是必需的,但我认为使用带有参数名的@符号仍然可以得到相同的结果。如果您希望使用Parameters.Add,请使用Parameters.Add(字符串名称,SqlDbType类型)重载,然后将值作为参数[“@Name”]传入。value=valuewhich似乎已经处理了它。现在我遇到了一个错误,关于没有对该表的插入权限,这是我自己愚蠢的错误,至少我知道如何修复这个错误:)
SqlParameterCollection.Add方法(字符串,对象)
已经过时了。尝试以下操作:使用
@
->
参数。添加(SqlParameter)
参数。添加范围(SqlParameter[])
或不使用
@
->
参数。添加WithValue(字符串,对象)
...............Property_ID)";
sqlQuery += "VALUES (@Today, ..............
...............Property_ID)";
sqlQuery += " VALUES (@Today, ..............