1

目前我正在做一个关于 C# 和 SQL 的项目,我遇到了关于 SELECT 函数的问题,我在网上找不到任何解决方案。

该方案是关于通过 SQL 服务器从 C# 搜索查询并将结果显示在 C# 的数据网格视图中。

我正在使用 Visual Studio 2008 和 SQL Server Studio 2008。

在开始这个项目之前,我刚刚从 Visual Studio 做了一个快速的 Windows 表单,然后做了一个 datagridview、2 个文本框和一个搜索按钮。

在 SQL Server 中,我有一个带有表格 DVD 的数据库,我想从这个带有 DVD ID 和名称的 Windows 表单中进行搜索。

我从 DVD ID 开始并实现了以下代码:

private void btnView_Click(object sender, EventArgs e)
{
   SqlConnection c = new SqlConnection(@"Data Source=GILBERTB-PC\SQLEXPRESS;Initial Catalog=DVDandGameBooking;Integrated Security=True"); 

   DataTable t = new DataTable();

   string sqlString = "SELECT * From DVD where Id ='" + txtID.Text+ "'";

   SqlDataAdapter dt = new SqlDataAdapter(sqlString, c);        
   dt.Fill(t);

   dtgv1.DataSource = t;
}

它奏效了:)

然后我将代码更改为

string sqlString = "SELECT * From DVD where Name ='" + txtName.Text+ "'";

这样我就可以使用 DVD 的名称进行搜索,但是当我启动程序并使用名称进行搜索时,它只显示了一个空白数据库

还有什么方法可以更改代码,以便我可以使用 ID 或名称进行搜索?

感谢您的帮助和时间

4

2 回答 2

2

想法:

  1. 确保 txtName.Text 有一个值
  2. 尝试使用 Enterprise Manager、Toad 或其他一些查询工具进行 SQL 选择。你得到了什么?
  3. 尝试使用 LIKE 作为下面的示例
  4. 最坏的情况,也许检查表的排序规则,也许它设置为“区分大小写”的文本匹配。

ID和姓名:

SELECT * FROM DVD
      WHERE Id=[ID Value]
      OR Name LIKE '%[Name Value]%'
于 2012-05-31T01:08:03.363 回答
2

或者您可以使用带有如下参数的 SQLCommand:

SqlConnection c = new SqlConnection(@"Data Source=GILBERTB-PC\SQLEXPRESS;Initial Catalog=DVDandGameBooking;Integrated Security=True");
string queryString = "SELECT * From DVD where Id = @id";
var paramId = new SqlParameter("id", SqlDbType.VarChar);
var query = new SqlCommand(queryString, c);
query.Parameters.Add(paramId);

如果你真的想使用 SQLDataAdapter,你可以将 select 命令设置为我上面写的那个。否则,您可以使用 dataReader 并遍历结果。

此外,使用这样的参数可以使您的查询更易于阅读,并使 SQL 注入更安全。应该始终考虑它。

Edit1:如果您想使用 Id 或 Name 进行搜索,您可以只制作 2 个参数,并OR在 2 之间放置一个,并且可能使用关键字like而不是=在您的查询中。如果值可以是null,您可能希望动态构建查询,具体取决于不是 的值null

于 2012-05-31T02:06:26.303 回答