如何使用 C# 在 windows 表单应用程序中搜索 SQL 服务器压缩数据库?
How to Search in SQL Server Compact Database in windows form application using C#?
我在 SQL Server Compact Database 中搜索 Data 的代码无法正常工作,请检查我的代码。任何帮助将不胜感激。
#region btnSearch_Click
private void btnSearch_Click(object sender, EventArgs e)
{
SqlCeConnection con = new SqlCeConnection("Data Source="
+ System.IO.Path.Combine(Path.GetDirectoryName(System.Reflection.Assembly.GetEntryAssembly().Location), "Database.sdf"));
sda = new SqlCeDataAdapter();
if (con.State == ConnectionState.Closed)
{
con.Open();
}
string sql = "select Name from tblCustomers ";
if (tbSearch.Text.Length > 0)
{
sql += "where Name like " + tbSearch.Text + " % ";
}
try
{
SqlCeCommand cmd = new SqlCeCommand(sql, con);
cmd.CommandType = CommandType.Text;
// if you don’t set the result set to
// scrollable HasRows does not work
SqlCeResultSet rs = cmd.ExecuteResultSet(
ResultSetOptions.Scrollable);
if (rs.HasRows)
{
int Name = rs.GetOrdinal("Name");
// Hold the output
StringBuilder output = new StringBuilder();
// Read the first record and get it’s data
rs.ReadFirst();
output.AppendLine(rs.GetString(Name)
+ " " + rs.GetString(Name));
while (rs.Read())
{
output.AppendLine(rs.GetString(Name)
+ " " + rs.GetString(Name));
}
// Set the output in the label
lblResults.Text = output.ToString();
}
else
{
lblResults.Text = "No Rows Found.";
}
}
catch (SqlCeException sqlexception)
{
MessageBox.Show(sqlexception.Message, "Error.",
MessageBoxButtons.OK, MessageBoxIcon.Error);
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "Error.",
MessageBoxButtons.OK, MessageBoxIcon.Error);
}
finally
{
con.Close();
}
#endregion
它抛出以下异常。
There was an error parsing the query. [ Token line number = 1,Token line offset = 53,Token in error = % ]
解决此类问题的一个有用方法是在将代码发送到 SQL 服务器之前查看代码生成的 SQL 字符串。如果您能立即发现问题,那就太好了 - 修复它。如果您无法直接使用 SQL Server Management Studio 尝试 运行 完整查询,看看您是否理解问题所在。如果您仍然无法 post 将此查询作为问答网站上的问题(就像 SO 上的此处一样),它会更容易帮助您。
在这种情况下,在我看来您好像缺少围绕值 ("like 'text'"
) 的单引号 - 但我不能确定,因为它取决于 tbSearch.Text
的值.
我在 SQL Server Compact Database 中搜索 Data 的代码无法正常工作,请检查我的代码。任何帮助将不胜感激。
#region btnSearch_Click
private void btnSearch_Click(object sender, EventArgs e)
{
SqlCeConnection con = new SqlCeConnection("Data Source="
+ System.IO.Path.Combine(Path.GetDirectoryName(System.Reflection.Assembly.GetEntryAssembly().Location), "Database.sdf"));
sda = new SqlCeDataAdapter();
if (con.State == ConnectionState.Closed)
{
con.Open();
}
string sql = "select Name from tblCustomers ";
if (tbSearch.Text.Length > 0)
{
sql += "where Name like " + tbSearch.Text + " % ";
}
try
{
SqlCeCommand cmd = new SqlCeCommand(sql, con);
cmd.CommandType = CommandType.Text;
// if you don’t set the result set to
// scrollable HasRows does not work
SqlCeResultSet rs = cmd.ExecuteResultSet(
ResultSetOptions.Scrollable);
if (rs.HasRows)
{
int Name = rs.GetOrdinal("Name");
// Hold the output
StringBuilder output = new StringBuilder();
// Read the first record and get it’s data
rs.ReadFirst();
output.AppendLine(rs.GetString(Name)
+ " " + rs.GetString(Name));
while (rs.Read())
{
output.AppendLine(rs.GetString(Name)
+ " " + rs.GetString(Name));
}
// Set the output in the label
lblResults.Text = output.ToString();
}
else
{
lblResults.Text = "No Rows Found.";
}
}
catch (SqlCeException sqlexception)
{
MessageBox.Show(sqlexception.Message, "Error.",
MessageBoxButtons.OK, MessageBoxIcon.Error);
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "Error.",
MessageBoxButtons.OK, MessageBoxIcon.Error);
}
finally
{
con.Close();
}
#endregion
它抛出以下异常。
There was an error parsing the query. [ Token line number = 1,Token line offset = 53,Token in error = % ]
解决此类问题的一个有用方法是在将代码发送到 SQL 服务器之前查看代码生成的 SQL 字符串。如果您能立即发现问题,那就太好了 - 修复它。如果您无法直接使用 SQL Server Management Studio 尝试 运行 完整查询,看看您是否理解问题所在。如果您仍然无法 post 将此查询作为问答网站上的问题(就像 SO 上的此处一样),它会更容易帮助您。
在这种情况下,在我看来您好像缺少围绕值 ("like 'text'"
) 的单引号 - 但我不能确定,因为它取决于 tbSearch.Text
的值.