2011-04-02 87 views
0

我想选择用户名,名字,SecondName,PicturePath(看图表),如名字(字符串搜索= textbox.text)帮助与SQL语法LIKE

OdbcCommand("SELECT UserID, FirstName, SecondName, p.PicturePath FROM User LEFT JOIN Pictures p ON p.UserID = u.UserID WHERE FirstName LIKE '%" + search + "%' ORDER BY UserID DESC", cn)) 

我的语法方式搞砸。

我的表结构:

enter image description here

回答

1

如果你打算在所有使用相关名称,你通常应该在整个使用它们。它可以帮助程序员,即使数据库不需要它。

SELECT u.UserID, u.FirstName, u.SecondName, p.PicturePath 
FROM User u 
LEFT JOIN Pictures p ON (p.UserID = u.UserID) 
WHERE u.FirstName LIKE '%" + search + "%' ORDER BY u.UserID DESC 

重新格式化一行,引用它并插入。它可能会克服语法问题。不知道它是否会给你你想要的结果。

如果您在使用此类工具时遇到问题,请从最简单的开始,然后从中开始构建。我会按照这个顺序去做,我自己。 (如果你把枪放在我的头上让我连接SQL。)

"SELECT u.UserID, u.FirstName, u.SecondName 
FROM User u;" 
-- 
"SELECT u.UserID, u.FirstName, u.SecondName 
FROM User u 
WHERE u.FirstName LIKE '%Cat%';" 
-- 
"SELECT u.UserID, u.FirstName, u.SecondName 
FROM User u 
WHERE u.FirstName LIKE " + "'%Cat%';" 
-- 
"SELECT u.UserID, u.FirstName, u.SecondName 
FROM User u 
WHERE u.FirstName LIKE '%" + "Cat" + "%';" 
-- 
SELECT u.UserID, u.FirstName, u.SecondName 
FROM User u 
WHERE u.FirstName LIKE '%" + search + "%';" 
-- 

等等。

0

使用%(如DOS *),或_(如DOS?)

快看,但你可能需要扭转你的左连接。

//编辑: 和自然,你的搜索字符串需要加引号 //结束编辑

问候。 /吨

1
OdbcCommand("SELECT UserID, FirstName, SecondName, p.PicturePath FROM User LEFT JOIN Pictures p ON p.UserID = u.UserID WHERE FirstName LIKE '%" + search + "%' ORDER BY UserID DESC", cn)) 
0

首先你应该使用一个参数,所以你不需要担心SQL注入。所以我会这样做:

 using (System.Data.Odbc.OdbcConnection connect = new System.Data.Odbc.OdbcConnection("Connection String")) 
     { 
      using (System.Data.Odbc.OdbcCommand command = connect.CreateCommand()) 
      { 
       string sql = "SELECT u.UserID, u.FirstName, u.SecondName, p.PicturePath FROM User u " + 
        "LEFT JOIN Pictures p ON p.UserID = u.UserID WHERE u.FirstName LIKE '%' + @search + '%' " + 
        "ORDER BY u.UserID DESC"; 
       command.CommandText = sql; 
       command.CommandType = System.Data.CommandType.Text; 
       command.Parameters.AddWithValue("@search", searchValue); 

       using (System.Data.Odbc.OdbcDataReader dr = command.ExecuteReader()) 
       { 
        //Do what you need here 
       } 
      } 
     } 

希望这有助于!