Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/6.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#_Winforms_Datagridview_Ado.net_Dataset - Fatal编程技术网

C# 数据集没有返回任何行吗?

C# 数据集没有返回任何行吗?,c#,winforms,datagridview,ado.net,dataset,C#,Winforms,Datagridview,Ado.net,Dataset,我不知道为什么我对带有参数的dataset的方法不起作用, 有人能调试或解释为什么我的代码不返回任何内容吗 这是我的数据集代码 public DataSet executeDataSet(String sql, Dictionary<String, Object> parameters) { try { cmd = new SqlCommand(sql, conn); foreach (KeyValuePair<String, Object&

我不知道为什么我对带有参数的dataset的方法不起作用, 有人能调试或解释为什么我的代码不返回任何内容吗

这是我的数据集代码

public DataSet executeDataSet(String sql, Dictionary<String, Object> parameters)
{
   try
   {
      cmd = new SqlCommand(sql, conn);
      foreach (KeyValuePair<String, Object> row in parameters)
      {
          cmd.Parameters.AddWithValue(row.Key, row.Value);
      }
      ds = new DataSet();
      adapter = new SqlDataAdapter(cmd);                
      adapter.Fill(ds);
      }
      catch (Exception e)
      {
          MessageBox.Show(e.Message);
      }
      return ds;
}
下面是调用DAL中的方法的代码,该方法将加载datagridview中名为dataGrid_SessionType的数据

public void loadData(string sql, Dictionary<string,object> param)
{

   DAL dal = new DAL(ConfigurationManager.ConnectionStrings["SADConnectionString"].ConnectionString);
   DataSet ds = new DataSet();
   ds = dal.executeDataSet(sql,param);
   try
   {
      dataGrid_SessionType.DataSource = ds.Tables[0].DefaultView;
   }
   catch (Exception e)
   {
      MessageBox.Show(e.Message, "Error Message", MessageBoxButtons.OK, MessageBoxIcon.Error);
   }
}
这是另一个调用loadData并传递所需参数的方法

private void btn_Search_Click(object sender, EventArgs e)
{              
   string sql = "Select SessionType_ID as ID, SessionType_Name as 'Session Name', SessionType_Desc as 'Session Description', Status from SessionType WHERE Status = 'Available' and SessionType_Name LIKE '@1'";
   Dictionary<string, object> param = new Dictionary<string, object>();
   param.Add("@1",txtbox_Search.Text+"%");
   loadData(sql, param);
   txtbox_Search.Clear();
}

对不起,我的英语不好

错误出现在由单引号包围的参数占位符中。这样,就可以将占位符转换为文字字符串。您的查询找不到SessionType_Name字段包含字符串@1的任何行。 应该删除参数占位符周围的单引号

string sql = @"Select SessionType_ID as ID, SessionType_Name as 'Session Name', 
               SessionType_Desc as 'Session Description', Status from SessionType 
               WHERE Status = 'Available' and SessionType_Name LIKE @1";

我们不知道你有什么数据,或者文本框包含什么,这让你很难得到帮助…抱歉,我忘了包括这些,我正在为我的程序构建一个搜索函数,搜索表名SessionType当前在txtbox输入的数据info@Steve我的连接字符串当前已在我的app.config中声明这是我的连接字符串:嗯,我尝试了你的代码,但是LIKE操作符需要一个引号,我尝试在我的参数中连接它,就像这个参数一样。Add@1,“+txtbox_Search.Text+%”;但它仍然并没有返回我期望的结果。使用参数化查询的许多好处之一是不加任何引号。无论是在命令文本中还是在参数值中。我建议使用调试器查看作为参数传递的值value@steve您的权利,我删除了引号在我的参数,它的工作很好,感谢现在我只需要调试和尝试,如果它是倾向于SQL注入