2012-06-14 73 views
1

錯誤顯示爲「附近有語法錯誤@Cmp_DocPath',如果我使用註釋行代碼中,我得到了錯誤的‘與參數名稱的SqlParameter的‘@Cmp_DocPath’不受此sqlparametercollection載’。怎麼我獲得文件名AsyncFileUpload AJAX控制的?不正確的語法時,通參數

protected void BtnCmpApproval_Click(object sender, EventArgs e) 
    { 
     SqlConnection SqlCon = new SqlConnection(GetConnectionString()); 
     string query = "INSERT INTO User_Info2 VALUES  (@lblCmpUserName,@txtCmpName, 
     @txtRegCountry,@txtCmpRegNo,@txtCmpEstdate,@txtCmpAddress,@ddlAddrIn)"; 
     try 
     { 
      SqlCon.Open(); 
      SqlCommand cmd = new SqlCommand(query, SqlCon); 
      cmd.CommandType = CommandType.Text; 
      cmd.Parameters.AddWithValue("@UserName", lblCmpUserName.Text); 
      cmd.Parameters.AddWithValue("@Cmp_Name", txtCmpName.Text); 
      cmd.Parameters.AddWithValue("@Commercial_RegNo", txtRegCountry.Text); 
      cmd.Parameters.AddWithValue("@Comm_Country", txtCmpRegNo.Text); 
      cmd.Parameters.AddWithValue("@Cmp_EstablishDate", txtCmpEstdate.Text); 
      //cmd.Parameters.AddWithValue("@Cmp_DocPath", AFU1.FileName); 
      cmd.Parameters["@Cmp_DocPath"].Value=AFU1.FileName; 
      cmd.Parameters.AddWithValue("@txtCmpAddress", txtCmpAddress.Text); 
      cmd.Parameters.AddWithValue("@ddlAddrIn", ddlAddrIn.SelectedItem.Text); 
      cmd.ExecuteNonQuery(); 
     } 
     catch (Exception ex) 
     { 
      throw new Exception(ex.Message); 
     } 
     finally 
     { 
      SqlCon.Close(); 
     } 
    }  

回答

0

您沒有添加參數的名稱@Cmp_DocPath,你的代碼只是假定它已經存在,而且它告訴你,這不是你應該添加參數您添加其他參數相同的方式,例如:

cmd.Parameters.AddWithValue("@Cmp_DocPath", AFU1.FileName); 
+0

感謝all.Now我加了參數Cmp_DocPath.Now新的錯誤被顯示爲「必須聲明標量變量」@lblCmpUserName「」我使用的是Visual Studio 2010和sql server 2008 – Hari

+0

@Hari,是的,看看代碼,在你的查詢中你有一個名爲'@ lblCmpUserName'的東西,然而,你只需將其命名爲'@ UserName'。這些名稱必須匹配。 –

+0

http://stackoverflow.com/questions/11062491/must-declare-the-scalar-variable-lblcmpusername – Hari

0

應該有查詢參數名稱和參數名稱添加參數值,當你給之間的匹配。檢查所有參數名稱,類型和參數的數量與您在查詢中給出的參數相同。

示例代碼:

try 
{ 
    string query = "INSERT INTO User_Info2 VALUES (@UserName,@Cmp_Name,@Commercial_RegNo,@Comm_Country,@Cmp_EstablishDate,@Cmp_DocPath, @txtCmpAddress,@ddlAddrIn)"; 
    using (SqlConnection SqlCon = new SqlConnection(GetConnectionString())) 
    { 
     SqlCon.Open(); 
     using (SqlCommand cmd = new SqlCommand(query, SqlCon)) 
     { 
      cmd.CommandType = CommandType.Text; 
      cmd.Parameters.AddWithValue("@UserName", lblCmpUserName.Text); 
      cmd.Parameters.AddWithValue("@Cmp_Name", txtCmpName.Text); 
      cmd.Parameters.AddWithValue("@Commercial_RegNo", txtRegCountry.Text); 
      cmd.Parameters.AddWithValue("@Comm_Country", txtCmpRegNo.Text); 
      cmd.Parameters.AddWithValue("@Cmp_EstablishDate", txtCmpEstdate.Text); 
      cmd.Parameters.AddWithValue("@Cmp_DocPath", AFU1.FileName); 
      cmd.Parameters.AddWithValue("@txtCmpAddress", txtCmpAddress.Text); 
      cmd.Parameters.AddWithValue("@ddlAddrIn", ddlAddrIn.SelectedItem.Text); 
      cmd.ExecuteNonQuery(); 
     } 

    } 

} 
catch (Exception ex) 
{ 
    throw new Exception(ex.Message); 
} 
+0

謝謝所有。現在我添加了參數Cmp_DocPath.Now新錯誤顯示爲「必須聲明標量變量」@lblCmpUserName「」。我正在使用Visual Studio 2010和SQL Server 2008. – Hari

1

您已在SQL插入字符串設置這些參數(7個參數)

@lblCmpUserName, 
@txtCmpName,  
@txtRegCountry, 
@txtCmpRegNo, 
@txtCmpEstdate, 
@txtCmpAddress, 
@ddlAddrIn 

您已在的SqlCommand加入這些參數(8個參數)

@UserName -> Missing 
@Cmp_Name -> Missing 
@Commercial_RegNo ->Missing 
@Comm_Country -> Missing 
@Cmp_EstablishDate ->Missing 
@Cmp_DocPath ->Missing 
@txtCmpAddress ->Found it !! 
@ddlAddrIn ->Found it!!!! 

正如你可以看到你錯過很多不止一個。我想你混淆了參數名稱的控件名稱。您應該將存在於插入字符串中的名稱更改爲添加到參數集合中的相同名稱。

string query = "INSERT INTO User_Info2 VALUES (@UserName,@Cmp_pName, " + 
       "@Comm_Country, @Commercial_RegNo,@Cmp_EstablishDate," + 
       "@txtCmpAddress,@ddlAddrIn); 

而且你添加參數Cmp_DocPath」,但我不能在你插入string中任何地方找到它。

+0

感謝all.Now我添加了參數Cmp_DocPath 。現在新的錯誤顯示爲「必須聲明標量變量」@lblCmpUserName「」我正在使用Visual Studio 2010和SQL Server 2008 – Hari

+0

當你在上面的代碼中編寫一個SqlCommand時,它就像你在說NET運行。 「嗨,我發送一個帶有佔位符的SqlServer的字符串作爲命令集中的參數,請用佔位符替換集合中的參數值」。現在,NET運行時搜索您的字符串的佔位符,但沒有參數相應的佔位符@lblCmpUserName,所以它抱怨你。 (並停在第一個) – Steve