【问题标题】:search database table for value and put it in a datatable在数据库表中搜索值并将其放入数据表中
【发布时间】:2010-01-26 19:12:12
【问题描述】:

我有一个文本框和一个搜索按钮,我试图在数据库表中搜索文件名并将它们显示在数据表中...

private void GetSearchResults(string machineID, string searchFileName)
{
    DataTable dt = new DataTable();
    SqlConnection connection = new SqlConnection();
    connection.ConnectionString = ConfigurationManager.ConnectionStrings["SumooHAgentDBConnectionString"].ConnectionString;
    connection.Open();
    SqlCommand sqlCmd = new SqlCommand("SELECT FileID, BuFileName FROM BackedUpFiles WHERE BuFileName Like '%@searchFileName%' AND MachineID=@machineID", connection);
    SqlDataAdapter sqlDa = new SqlDataAdapter(sqlCmd);

    sqlCmd.Parameters.AddWithValue("@machineID", machineID);

    sqlCmd.Parameters.AddWithValue("@searchFileName", searchFileName);

    sqlDa.Fill(dt);
}

一切正常,除了 searchFileName 在查询中不起作用...

我试着只输入一个值来检查

SELECT FileID, BuFileName FROM BackedUpFiles WHERE BuFileName Like '%b%' AND MachineID=@machineID

我得到了文件值...

有什么建议吗??

【问题讨论】:

  • 您是否尝试过在调试器中单步执行?调用函数时searchFileName的值是多少?
  • 您还需要在 SqlConnectionSqlCommandSqlDataAdapter 实例周围使用 using 块。

标签: c# asp.net sql search


【解决方案1】:

你的变量在一个字符串中,它告诉数据库搜索文字字符串'@searchFileName'。要使用变量的值,试试这个

'%' + @searchFileName + '%'

【讨论】:

    【解决方案2】:

    这是你需要的:

    private void GetSearchResults(string machineID, string searchFileName)
    {
        DataTable dt = new DataTable();
        SqlConnection connection = new SqlConnection();
        connection.ConnectionString = ConfigurationManager.ConnectionStrings["SumooHAgentDBConnectionString"].ConnectionString;
        connection.Open();
        SqlCommand sqlCmd = new SqlCommand("SELECT FileID, BuFileName FROM BackedUpFiles WHERE BuFileName Like @searchFileName AND MachineID=@machineID", connection);
        SqlDataAdapter sqlDa = new SqlDataAdapter(sqlCmd);
    
        sqlCmd.Parameters.AddWithValue("@machineID", machineID);
    
        sqlCmd.Parameters.AddWithValue("@searchFileName", String.Format("%{0}%",searchFileName);
    
        sqlDa.Fill(dt);
    }
    

    我以前遇到过这种情况。出于某种原因,它不知道如何解析引号中的参数。我猜它认为这是一个文字。

    【讨论】:

    • 如果您的 dbms 每次都将 @ 识别为变量,您将如何在数据库中搜索它?
    【解决方案3】:

    在你的选择中试试这个

    SELECT FileID, BuFileName FROM BackedUpFiles where REGEXP_LIKE(upper(BuFileName ),UPPER(@searchFileName)) AND MachineID=@machineID;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-07-10
      • 2020-02-09
      • 1970-01-01
      • 1970-01-01
      • 2020-11-17
      • 2014-06-02
      • 1970-01-01
      相关资源
      最近更新 更多