Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/video/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# C和SQL选择_C# - Fatal编程技术网

C# C和SQL选择

C# C和SQL选择,c#,C#,目前我正在做一个关于C和SQL的项目,我有一个关于SELECT函数的问题,我无法在线找到任何解决方案 该场景是通过SQLServer从C搜索查询,并在C的数据网格视图中显示结果 我正在使用VisualStudio2008和SQLServerStudio 2008 在开始这个项目之前,我只是从VisualStudio中快速创建了一个Windows窗体,并创建了一个datagridview、两个文本框和一个搜索按钮 在SQL Server上,我有一个带有表DVD的数据库,我想用DVD ID和名称从此

目前我正在做一个关于C和SQL的项目,我有一个关于SELECT函数的问题,我无法在线找到任何解决方案

该场景是通过SQLServer从C搜索查询,并在C的数据网格视图中显示结果

我正在使用VisualStudio2008和SQLServerStudio 2008

在开始这个项目之前,我只是从VisualStudio中快速创建了一个Windows窗体,并创建了一个datagridview、两个文本框和一个搜索按钮

在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或名称进行搜索

感谢您的帮助和时间

思考:

确保txtName.Text有一个值 使用企业管理器、Toad或其他查询工具尝试SQL选择。你得到了什么? 尝试使用下面的例子 最坏的情况是,可能检查表的排序规则,可能将其设置为“区分大小写”文本匹配。 ID和名称:

SELECT * FROM DVD
      WHERE Id=[ID Value]
      OR Name LIKE '%[Name Value]%'
想法:

确保txtName.Text有一个值 使用企业管理器、Toad或其他查询工具尝试SQL选择。你得到了什么? 尝试使用下面的例子 最坏的情况是,可能检查表的排序规则,可能将其设置为“区分大小写”文本匹配。 ID和名称:

SELECT * FROM DVD
      WHERE Id=[ID Value]
      OR Name LIKE '%[Name Value]%'

或者,您可以将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或名称进行搜索,只需创建2个参数,并在2个参数之间添加or,还可以在查询中使用关键字like而不是=。如果值可以为null,则可能需要根据不为null的值动态生成查询。

或者您可以将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或名称进行搜索,只需创建2个参数,并在2个参数之间添加or,还可以在查询中使用关键字like而不是=。如果值可以为null,则您可能希望根据不为null的值动态生成查询。

是否尝试在SQL中执行相同的脚本以查看返回的内容?Bobby Tables将拥有您。user1427266,它最终是否工作?您是否尝试在SQL中执行相同的脚本以查看返回的内容?Bobby Tables将拥有您。user1427266,它最终是否工作?不,您可以-您应该+1你不能——你应该+1.