2014-07-02 33 views
0

我收到錯誤或當應用程序作爲其凍結收到錯誤給我留言:與數據集

Must declare the scalar variable "@Category" " next to dashowadscat.Fill(dsadsshowcat);

也有查詢字符串下紅線[「貓」]

using (SqlConnection shwadscat = new SqlConnection(cs)) 
      {     
      shwadscat.Open(); 

      SqlDataAdapter dashowadscat = 
       new SqlDataAdapter("SELECT DISTINCT [AdsID], 
             [Section], 
             [Category], 
             [Country], 
             [State], 
             [City], 
             [AdsTit], 
             SUBSTRING([AdsDesc],1,155) as AdsDesc, 
             [AdsPrice], 
             [Img1] 
            FROM [ads] 
            WHERE (([Category] = @Category) 
            AND ([Country] = @Country))", cs); 

      string location = Convert.ToString(Session["location"]); 
      string cat = Convert.ToString(QueryString["cat"]); 

      DataSet dsadsshowcat = new DataSet(); 

      dashowadscat.Fill(dsadsshowcat); 

      cateshowlistview.DataSource = dsadsshowcat.Tables[0]; 
      cateshowlistview.DataBind(); 
      } 
     } 
     else 
     {...} 

回答

0

的幾個問題...

  • 您需要在您的查詢字符串中的參數的值。

  • 我假設你想要Request.QueryString,而不僅僅是QueryString,這本身並不意味着什麼,這就是爲什麼你會得到語法錯誤。

  • 您當前正在傳遞您的SqlDataAdapter連接字符串,而不是您實例化的SqlConnection。如果連接字符串適用於SqlDataAdapter,則可以完全刪除SqlConnection「shwadscat」。

試試這個:

var location = Convert.ToString(Session["location"]); 
var cat = Convert.ToString(Request.QueryString["cat"]); 

var dsadsshowcat = new DataSet(); 

using (SqlConnection shwadscat = new SqlConnection(cs)) 
{ 
    shwadscat.Open(); 

    using (var dashowadscat = new SqlDataAdapter("SELECT DISTINCT AdsID, Section, Category, Country, State, City, AdsTit, SUBSTRING(AdsDesc,1,155) as AdsDesc, AdsPrice, Img1 FROM ads WHERE Category = @Category AND Country = @Country", shwadscat)) 
    { 
     dashowadscat.SelectCommand.Parameters.AddWithValue("@Category", cat); 
     dashowadscat.SelectCommand.Parameters.AddWithValue("@Country", location); 

     dashowadscat.Fill(dsadsshowcat); 

     cateshowlistview.DataSource = dsadsshowcat.Tables[0]; 
     cateshowlistview.DataBind(); 
    } 
} 

對榮譽的方式參數化查詢。這是更安全,更可維護的方式。

+0

下得到了一條紅線,真的非常感謝爲您的答覆,但我得到一個紅線在'參數'錯誤'System.Data.SqlClient.SqlDataAdapter'沒有包含'參數'的定義和沒有擴展方法'參數'接受類型'系統的第一個參數.Data.SqlClient。SqlDataAdapter'(可以找到缺少使用指令或程序集引用?) – user3716314

+0

已更新。我只是意識到你不能像這樣訪問'Parameters'集合。 –

0

select語句需要where子句中2個參數,你沒有向他們提供。

0

請檢查您的SQL SELECT DISTINCT [AdsID],[Section], [Category], [Country], [State], [City], [AdsTit], SUBSTRING([AdsDesc],1,155) as AdsDesc, [AdsPrice], [Img1] FROM [ads] WHERE (([Category] = @Category) AND ([Country] = @Country))

我相信你想傳遞@Category@Country作爲參數,你可以檢查SqlParameter,否則,你可能會Concat的您的SQL代碼,如:

編輯(展開與整個代碼中使用,並改變csshwadscat

using (SqlConnection shwadscat = new SqlConnection(cs)) 
{ 
    shwadscat.Open(); 

    string location = Convert.ToString(Session["location"]); 
    string cat = Convert.ToString(QueryString["cat"]); 

    SqlDataAdapter dashowadscat = new SqlDataAdapter("SELECT DISTINCT [AdsID],[Section], [Category], [Country], [State], [City], [AdsTit], SUBSTRING([AdsDesc],1,155) as AdsDesc, [AdsPrice], [Img1] FROM [ads] WHERE (([Category] = '" + cat+ "') AND ([Country] = '" + location + "'))", shwadscat); 

    DataSet dsadsshowcat = new DataSet(); 

    dashowadscat.Fill(dsadsshowcat); 

    cateshowlistview.DataSource = dsadsshowcat.Tables[0]; 
    cateshowlistview.DataBind(); 
} 
+0

感謝您的回覆是的我想使用類別和國家作爲參數來顯示具體的廣告取決於他們,我已經嘗試過你的SQL語句,但我仍然得到錯誤必須聲明標量變量「@Category」。我已經使用了sqldatasource和它的工作正常,但我更喜歡使用服務器代碼,這裏是sqldatasource代碼工作正常,我已經在我的帖子中添加 – user3716314

+0

你可以搜索你的程序'@ Category'嗎?我認爲在你修改了sql之後,你的代碼中不應該有任何'@ Category'。除此之外,我發現你可以在'new SqlDataAdapter'中使用'shwadscat'作爲第二個參數而不是'cs'。 – Prisoner

0

你^ h AVE未申報的標量@Category,這裏有一個例子:

SqlCommand cmd = new SqlCommand("SELECT DISTINCT [AdsID],[Section], [Category], [Country], [State], [City], [AdsTit], SUBSTRING([AdsDesc],1,155) as AdsDesc, [AdsPrice], [Img1] FROM [ads] WHERE (([Category] = @Category) AND ([Country] = @Country))", cs); 
cmd.Parameters.Add("@Category", SqlDbType.Int); 
cmd.Parameters["@ID"].Value = ""; 
cmd.Parameters.Add("@Country", SqlDbType.Int); 
cmd.Parameters["@ID"].Value = ""; 
+0

Dear @stackCheck感謝你的回覆,但它不起作用,我在SqlCommand語句 – user3716314