標籤

more tags...

最新回覆

解決ASP.NET的SqlCommand,利用SqlParameter來下SQL指令"Where In"的問題

前陣子在討論區看到這方面的問題...小弟去測了一下..有以下心得...

資料表內容如下:

一般作法,sql where in字串,全由使用者定義

            string queryString = "SELECT id,gender,name FROM [user] Where id in(19,21,24)";
            SqlCommand cmd = new SqlCommand(queryString, conn);
            SqlDataAdapter adapter = new SqlDataAdapter(cmd);
            DataTable dt = new DataTable();
            adapter.Fill(dt);
            this.GridView1.DataSource = dt;
            this.GridView1.DataBind();

參數作法,sql where in字串,使用@IdGroup方式,@IdGroup = 19,這樣是正常可以run的

            string queryString = "SELECT id,gender,name FROM [user] Where id in(@IdGroup)";
            SqlCommand cmd = new SqlCommand(queryString, conn);
            cmd.Parameters.Add("@IdGroup", "19");
            SqlDataAdapter adapter = new SqlDataAdapter(cmd);
            DataTable dt = new DataTable();
            adapter.Fill(dt);
            this.GridView1.DataSource = dt;
            this.GridView1.DataBind();

參數作法,sql where in字串,使用@IdGroup方式,@IdGroup = 19,21,24,這樣會產生錯誤

            string queryString = "SELECT id,gender,name FROM [user] Where id in(@IdGroup)";
            SqlCommand cmd = new SqlCommand(queryString, conn);
            cmd.Parameters.Add("@IdGroup", "19,21,24");
            SqlDataAdapter adapter = new SqlDataAdapter(cmd);
            DataTable dt = new DataTable();
            adapter.Fill(dt);
            this.GridView1.DataSource = dt;
            this.GridView1.DataBind();

解決方法,將參數分成多個,例如 where id in(@param1,@param2,@param3),然後設定每一個參數的值

            string query = "19,21,24";
            string[] param = query.Split(',');
            string temp = "";
            for (int i = 0; i < param.Length; i++)
            {
                temp += "@param" + i.ToString() + ",";
            }

            string queryString = "SELECT id,gender,name FROM [user] Where id in(" + temp.Substring(0, temp.Length - 1) + ")";
            SqlCommand cmd = new SqlCommand(queryString, conn);

            for (int i = 0; i < param.Length; i++)
            {
                cmd.Parameters.Add("@param" + i.ToString(), SqlDbType.Int).Value = param[i];
            }


            SqlDataAdapter adapter = new SqlDataAdapter(cmd);
            DataTable dt = new DataTable();
            adapter.Fill(dt);
            this.GridView1.DataSource = dt;
            this.GridView1.DataBind();

執行結果:

推到 Twitter!
推到 Plurk!


 

2008/4/8 17:03| 閱讀數 : 6753 | 2 人收藏 我要推薦 | 3 Comments | 文章分類 : ASP.NET MS SQL 訂閱


回覆

# re: 解決ASP.NET的SqlCommand,利用SqlParameter來下SQL指令"Where In"的問題, Posted by dotjum on 2008/4/8 下午 05:43  回覆

hi puma:
我採用的是 TSQL CHARINDEX 主要是找出符合比較值的方式
詳細的內容寫在這篇
http://www.dotblogs.com.tw/dotjum/archive/2008/04/08/2618.aspx

# re: 解決ASP.NET的SqlCommand,利用SqlParameter來下SQL指令"Where In"的問題, Posted by 小賤健 on 2008/4/14 上午 11:31  回覆

欸~我自己是習慣把 SQL 命令丟到 SP 裡,這樣就不會遇到上述的問題了XD
很鳥的方法,對吧:p

# re: 解決ASP.NET的SqlCommand,利用SqlParameter來下SQL指令"Where In"的問題, Posted by aa on 2009/7/27 上午 11:25  回覆

string query = "19,21,24";
query.replace(",","','");
query="'"+query+"'";
只適用於字串

發表回覆

標題: *
姓名: *
Email: (將不會被顯示)
Url:
回覆: *
登入後使用進階評論
Please add 1 and 1 and type the answer here:
F6 Team logo


用BloggerAds 替自已加薪

每月文章

文章分類

推薦討論區

推薦部落格