C# 使用LIKE运算符:与SQL Server一起使用,但不与SQLite一起使用

C# 使用LIKE运算符:与SQL Server一起使用,但不与SQLite一起使用,c#,sqlite,tsql,C#,Sqlite,Tsql,我的应用程序在连接到internet时在线检索数据,但允许用户在脱机时查看数据。为了实现这一点,我让应用程序从在线SQL server下载相关信息,并将其保存到SQLite DB中,以便在机器未连接到internet时使用。在我的一个窗口上,我有一个搜索功能,可以查找包含输入字符串的“注释”。首先,我编写了连接到SQL数据库时的查询: SqlConnection conn = new SqlConnection(myconnstring);

我的应用程序在连接到internet时在线检索数据,但允许用户在脱机时查看数据。为了实现这一点,我让应用程序从在线SQL server下载相关信息,并将其保存到SQLite DB中,以便在机器未连接到internet时使用。在我的一个窗口上,我有一个搜索功能,可以查找包含输入字符串的“注释”。首先,我编写了连接到SQL数据库时的查询:

                SqlConnection conn = new SqlConnection(myconnstring);
                await conn.OpenAsync();
                string sqlstr = "SELECT * FROM " + Application.Current.Properties["connection"] + "_Notes WHERE Written_ID = @uid AND Content LIKE '%' + @srch + '%' ORDER BY Creation_Time DESC";
                SqlCommand cmd = new SqlCommand(sqlstr, conn);
                cmd.Parameters.AddWithValue("uid", Convert.ToInt32(Application.Current.Properties["userid"].ToString()));
                cmd.Parameters.AddWithValue("srch", searchbox.Text.ToString());
                SqlDataAdapter sda = new SqlDataAdapter(cmd);
                DataTable dt = new DataTable("Notes");
                sda.Fill(dt);
                notescontrol.ItemsSource = dt.DefaultView;
                conn.Close();
这正是我想要它做的。它返回包含该字符串的所有注释。接下来,我为SQLite DB创建了字符串(该数据库有一个[Office]列,需要与用户的当前列匹配):

我做了自己的研究,没有发现SQL中的like语句与SQLite中的like语句有任何区别。那么我哪里出错了呢?

SQLite中的字符串连接操作符是
|
。因此,您需要两个不同的查询文本。但是,如果更改为类似条件传递参数的方式,则可以避免此问题

 string sqlstr = @"SELECT * FROM Notes WHERE Office = @off 
                     AND Written_ID = @uid 
                     AND Content LIKE @srch 
                     ORDER BY Creation_Time DESC";

 ....

 cmd.Parameters.AddWithValue("@srch", "%" + searchbox.Text + "%");

顺便说一下,searchbox.Text属性已经是一个字符串,不需要对其调用ToString()

连接在SQL Server和SQLite中是不同的
 string sqlstr = @"SELECT * FROM Notes WHERE Office = @off 
                     AND Written_ID = @uid 
                     AND Content LIKE @srch 
                     ORDER BY Creation_Time DESC";

 ....

 cmd.Parameters.AddWithValue("@srch", "%" + searchbox.Text + "%");