Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/21.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# OLEDB参数化查询_C#_.net_Winforms_Ms Access_Oledb - Fatal编程技术网

C# OLEDB参数化查询

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

我试图使用参数化查询将access文件绑定到datagridview中。它发现列名很好,但内容是空的


如何解决此问题?

在我的测试程序中,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查询上。谢谢你。谢谢你的例子…关于这个的文档很糟糕。同意,我努力通过互联网的深处找到它。谢谢你的例子…关于这个的文档很糟糕。同意,我努力通过互联网的深处找到它。