简体   繁体   English

使用odbc在csv文件中执行SQL查询

[英]Execute SQL Query in csv file using odbc

My connection string 我的连接字符串

    <add connectionString="Driver={Microsoft Text Driver (*.txt; *.csv)}; Dbq=E:; Extensions=asc,csv,tab,txt;" 
     name="TestConnectionString"/>

My C# code: 我的C#代码:

        protected void ExecuteButton_Click(object sender, EventArgs e)
    {
        string connectionString = System.Configuration.ConfigurationManager.ConnectionStrings["TestConnectionString"].ConnectionString;
        using (OdbcConnection con = new OdbcConnection(connectionString))
        {
            con.Open();
            string sql = "SELECT date_id FROM date_conversion.csv WHERE [date_in_ad] = '4/13/1944'";
            using (OdbcCommand command =  new OdbcCommand(sql, con))
            {
                ResultTextBox.Text = Convert.ToString(command.ExecuteScalar());
            }
        }
    }

My CSV file: 我的CSV文件:

date_id date_in_ad ad_month_id ad_date_id ad_year_id
  1      4/13/1944    4           13          1944
  2      4/14/1944    4           14          1944
  3      4/15/1944    4           15          1944
  4      4/16/1944    4           16          1944
  5      4/17/1944    4           17          1944

I am receiving following error: System.Data.Odbc.OdbcException: ERROR [22018] [Microsoft][ODBC Text Driver] Data type mismatch in criteria expression. 我收到以下错误: System.Data.Odbc.OdbcException:错误[22018] [Microsoft] [ODBC文本驱动程序]条件表达式中的数据类型不匹配。

So, lets rename the question to "I get a sql exception, please help" 因此,让我们将问题重命名为“我遇到了SQL异常,请帮忙”

It has nothing to do with csv. 它与csv无关。 And from your code only one line is relevant: 在您的代码中只有一行是相关的:

string sql = "SELECT date_id FROM date_conversion.csv WHERE [date_in_ad] = '4/13/1944'";

Let's have a look again at the error: 让我们再次看一下错误:

Data type mismatch in criteria expression 条件表达式中的数据类型不匹配

THere is only one criteria - [date_in_ad] and a date literal. 这只是一个条件-[date_in_ad]和日期文字。

http://msdn.microsoft.com/en-us/library/ms710282(v=vs.85).aspx http://msdn.microsoft.com/en-us/library/ms710282(v=vs.85).aspx

has nice exampls how dates should look for ODBC.... 有很好的示例,日期应如何查找ODBC。

http://technet.microsoft.com/en-us/library/ms190234(v=sql.90).aspx http://technet.microsoft.com/en-us/library/ms190234(v=sql.90).aspx

has more explanations. 有更多的解释。 And no, they do absolutely not look like your string. 不,它们绝对看起来不像您的字符串。

Date constants look like: 日期常量如下所示:

{ d '1990-10-02' }

To make things easy - use a parameter. 为了使事情变得容易-使用参数。 Please. 请。

Check MS KB 检查MS KB

Try this query 试试这个查询

string sql = "SELECT date_id FROM date_conversion.csv WHERE [date_in_ad] = #4/13/1944#";

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM