C# OLEDB参数化查询
我试图使用参数化查询将access文件绑定到datagridview中。它发现列名很好,但内容是空的C# OLEDB参数化查询,c#,.net,winforms,ms-access,oledb,C#,.net,Winforms,Ms Access,Oledb,我试图使用参数化查询将access文件绑定到datagridview中。它发现列名很好,但内容是空的 如何解决此问题?在我的测试程序中,ds.Tables[0].Rows.Count datatable实际上返回了1行,因为我的测试数据库中有一行与查询本身匹配。如果在这一行上加一个分隔符,您应该能够首先看到数据是否进入datatable。试试这个: public void LoadDB() { string FileName = @"c:\asdf.accdb"; string
如何解决此问题?在我的测试程序中,ds.Tables[0].Rows.Count datatable实际上返回了1行,因为我的测试数据库中有一行与查询本身匹配。如果在这一行上加一个分隔符,您应该能够首先看到数据是否进入datatable。试试这个:
public void LoadDB()
{
string FileName = @"c:\asdf.accdb";
string query = "SELECT ID, Field1 FROM Table1 WHERE ID=? AND Field1=?";
string strConn = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + FileName;
OleDbConnection odc = new OleDbConnection(strConn);
dAdapter = new OleDbDataAdapter();
OleDbCommand cmd = new OleDbCommand(query,odc);
cmd.Parameters.Add("?", OleDbType.Integer, 5).Value = 1234;
cmd.Parameters.Add("?", OleDbType.BSTR, 5).Value ="asdf";
dAdapter.SelectCommand = cmd;
ds = new DataSet();
dAdapter.Fill(ds);
dataGridView1.DataSource = ds.Tables[0];
}
dataGridView1的前端绑定是什么样子的?在Access中运行查询也可以了解一些情况。在我的测试程序中,ds.Tables[0].Rows.Count datatable实际上返回了1行,因为我的测试数据库中有一行与查询本身匹配。如果在这一行上加一个分隔符,您应该能够首先看到数据是否进入datatable。试试这个:
public void LoadDB()
{
string FileName = @"c:\asdf.accdb";
string query = "SELECT ID, Field1 FROM Table1 WHERE ID=? AND Field1=?";
string strConn = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + FileName;
OleDbConnection odc = new OleDbConnection(strConn);
dAdapter = new OleDbDataAdapter();
OleDbCommand cmd = new OleDbCommand(query,odc);
cmd.Parameters.Add("?", OleDbType.Integer, 5).Value = 1234;
cmd.Parameters.Add("?", OleDbType.BSTR, 5).Value ="asdf";
dAdapter.SelectCommand = cmd;
ds = new DataSet();
dAdapter.Fill(ds);
dataGridView1.DataSource = ds.Tables[0];
}
dataGridView1的前端绑定是什么样子的?在Access中运行查询也可以了解情况。请尝试在参数中不指定列大小:
dataGridView1.DataSource = ds.Tables[0];
尝试在参数中不指定列大小:
dataGridView1.DataSource = ds.Tables[0];
下面是一个参数化查询如何使用CSharp、OleDB的示例
cmd.Parameters.Add("?", OleDbType.Integer).Value = 1234;
cmd.Parameters.Add("?", OleDbType.BSTR).Value ="asdf";
这将适用于任何sql语句,您必须指定问号吗?到每个参数,然后在下面,您必须创建参数,并按照排列问号的顺序添加这些参数,以便将正确的数据添加到正确的字段中 以下是参数化查询如何与CSharp、OleDB一起工作的示例
cmd.Parameters.Add("?", OleDbType.Integer).Value = 1234;
cmd.Parameters.Add("?", OleDbType.BSTR).Value ="asdf";
这将适用于任何sql语句,您必须指定问号吗?到每个参数,然后在下面,您必须创建参数,并按照排列问号的顺序添加这些参数,以便将正确的数据添加到正确的字段中 当您从Access手动运行返回行并输入上述给定参数时,是否查询返回行?您的第一个参数是整数,但您将其设置为字符串。@BishnuPaudel对不起,您能澄清一下吗?我不确定我是否理解你的问题。我所知道的是,如果我使用OleDBCommandBuilder而不是参数化查询,那么整个过程都会完美运行。@LarsTech修复了这个问题。考虑使用SQL和两个参数字段在Access中创建查询,然后调用查询,而不是通过SQLID传递查询,当您手动从访问和输入给定参数时运行它。您的第一个参数是整数,但将其设置为字符串。@ BishnuPaudel对不起,你能澄清一下吗?我不确定我是否理解你的问题。我所知道的是,如果我使用OleDBCommandBuilder而不是参数化查询,那么整个过程都会完美运行。@LarsTech修复了这个问题。仍然不工作。考虑用SQL和两个参数字段在Access中创建查询,然后调用查询,而不是传递您建议的SQLAs,我在DATABATE上设置断点,而当数据获得列时,它不会得到行。可能的原因是什么?那么ds.Tables[0].Rows.Count==0?您是否也从Access中运行SQL来验证输出?没关系,问题出在我的SQL查询上。谢谢。正如您所建议的,我在datatable上设置了一个断点,当数据获取列时,它不会获取行。可能的原因是什么?那么ds.Tables[0].Rows.Count==0?您是否也从Access中运行SQL来验证输出?没关系,问题出在我的SQL查询上。谢谢你。谢谢你的例子…关于这个的文档很糟糕。同意,我努力通过互联网的深处找到它。谢谢你的例子…关于这个的文档很糟糕。同意,我努力通过互联网的深处找到它。