C# C和ACCESS SQL(*.accdb)

C# C和ACCESS SQL(*.accdb),c#,ms-access,C#,Ms Access,好了,各位,我用DB编写了我的第一个C程序,但我遇到了一个问题。我从ACCESS数据库获取,文件的方向是我需要复制字符串的位置。在Access中,查询正在运行,但我的程序无法获取此字符串并从中复制文件。。。我做错了什么?p、 对不起我的英语 代码如下: static void Main(string[] args) { Microsoft.Office.Interop.Excel.Application excel = new Microsoft.Office.Interop.Excel

好了,各位,我用DB编写了我的第一个C程序,但我遇到了一个问题。我从ACCESS数据库获取,文件的方向是我需要复制字符串的位置。在Access中,查询正在运行,但我的程序无法获取此字符串并从中复制文件。。。我做错了什么?p、 对不起我的英语

代码如下:

static void Main(string[] args)
{
    Microsoft.Office.Interop.Excel.Application excel = new Microsoft.Office.Interop.Excel.Application();
    Microsoft.Office.Interop.Excel.Worksheet mysheet;
    Microsoft.Office.Interop.Excel.Range myrange;
    excel.Workbooks.Open("E:\\access\\Book1.xlsm");
    //excel.Visible = true;
    mysheet = excel.Worksheets[1];
    myrange = mysheet.Cells;
    int lastrow = mysheet.UsedRange.Count;
    for (int i = 1; i <= lastrow; i++)
    {
        Console.WriteLine(myrange.Item[i, 1].Value);
        string fileName = myrange.Item[i, 1].Value + ".pdf";
        System.Data.OleDb.OleDbConnection conn = new System.Data.OleDb.OleDbConnection();
        conn.ConnectionString = @"Provider=Microsoft.ACE.OLEDB.12.0;" +
        @"Data source= E:\ACCESS\test.accdb";
        conn.Open();
        String my_query = "SELECT adres FROM zrodla WHERE RIGHT(adres,21) = '" + fileName + "'";
        OleDbCommand cmd = new OleDbCommand(my_query, conn);
        cmd.ExecuteNonQuery();
        //DateTime ddd = DateTime.Now;
        //string ddd2 = ddd.ToString("yyyy-MM-dd");
        //string miesiac = ddd.ToString("MM");
        //string dzien = ddd.ToString("dd");
        string sourcePath = cmd.ToString();
        string targetPath = @"E:\ACCESS\ho\";
   
        if (System.IO.File.Exists(sourcePath+fileName))
        {
            string sourceFile = System.IO.Path.Combine(sourcePath, fileName);
            string destFile = System.IO.Path.Combine(targetPath, fileName);
            System.IO.File.Copy(sourceFile, destFile, true);
        }
        else
        {
            Console.Write("Plik nie istnieje!: " + fileName+"\n");
            System.Data.OleDb.OleDbConnection conn2 = new System.Data.OleDb.OleDbConnection();
            conn2.ConnectionString = @"Provider=Microsoft.ACE.OLEDB.12.0;" +
            @"Data source= E:\ACCESS\test.accdb";
            conn2.Open();
            String my_query2 = "INSERT INTO dane(appid) VALUES('"+fileName+"')" ;
            OleDbCommand cmd2 = new OleDbCommand(my_query, conn2);
            cmd2.ExecuteNonQuery();
        }
    }
}

ExecuteOnQuery不会返回任何结果,但我怀疑您希望获得查询结果,而这不能仅通过使用cmd.ToString来实现


正确的方法是使用ExecuteReader,它返回一个可用于检查结果的数据读取器。读取器一次查看一行,您可以检查各个列的内容,并可以移动到下一行。我相信有很多资源可以帮助您使用阅读器,例如字符串sourcePath中的

,我需要查询结果,如E:\pb\send\2017-05-03\A_201602020005555.pdf,但结果为0。。。我不知道为什么sourcePath中总是0-而不是access记录中保存的方向..我尝试使用ExecuteReader,但仍然出错。。。也许问题是查询的结果?E:\pb\send\2017-05-03\A_20160202000555555.pdf错误消息可能有助于确定问题所在。否则我们只能盲目猜测。