2011-04-30 112 views
2

第一次我正在从ASP.NET/C#执行插入操作,并遇到一些小问题。每次运行此代码时,我都会收到以下错误:“ExecuteNonQuery:CommandText属性尚未初始化”有谁知道这意味着什么,以及我如何修复它?C#数据库插入(ASP.NET) - 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(); 
    } 
} 
+0

'SqlParameterCollection.Add方法(String,对象)'是过时的。 http://msdn.microsoft.com/en-us/library/9dd8zze1%28v=vs.80%29.aspx。试试这些:使用'@' - >'Parameters.Add(SqlParameter)','Parameters.AddRange(SqlParameter [])'或者没有'@' - >'Parameters.AddWithValue(String,Object)' – Jaider 2013-01-02 21:23:53

回答

6
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(); 
    } 
} 

复制粘贴应该做的伎俩

+0

因此,从它的外观你已经修复了我的代码与上述建议,我得到了很多,但(对不起,如果这是一个noob问题)Parameters.Add和参数之间有什么区别。 AddWithValue - 这是我的原始@sa偏好的结果的遗漏还是我错误地使用它们在第一个地方? – 2011-05-01 23:11:31

+0

我只使用传入参数presenstantiated的方法的Parameters.Add(SqlParameter)重载。您使用的重载目前已被Microsoft过时。过去我从来没有成功使用它。至于@符号,在VB中,我必须使用@符号指定参数名称,当使用AddWithValue方法时,但在C#中它不是必需的,但我认为仍然可以使用具有参数名称的@符号得到相同的结果。如果你想使用Parameters.Add,使用Parameters.Add(String Name,SqlDbType Type)重载,然后以参数[“@ Name”]的形式传入值。Value = Value – Dimitri 2011-05-02 14:24:10

+0

似乎已经处理了它。现在我得到了关于没有INSERT权限的错误,这是我自己的愚蠢错误,至少我知道如何解决这个问题:) – 2011-05-02 15:48:46

1

这通常意味着你没有设置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(); 
+0

尝试在设置对象之前和之后打开它,以防万一与错误有关,忘记在发布代码之前将其移回。感谢提示虽然:) – 2011-05-01 23:07:47

1

看着你的字符串sql查询,你不会在“INTO”部分和“VALUES”部分之间留出一个空格。

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

应该是:

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

哦,亲爱的,那肯定会导致一些问题。任何想法,如果它会导致这个具体问题? dataCommand是否在发送之前实际解析SQL,或者只是在我修复* this *错误的原因后返回SQL错误? – 2011-05-01 23:09:20

相关问题