将信息从SQL Server写入C#

时间:2015-06-09 20:45:08

标签: c# sql-server

下面我有一段应该从我的数据库中写出列的代码,但是当我尝试执行时,它给了我一个例外,它说它不能读取没有值的列,但是它的错误因为它应该包含我希望信息出来的列中的日期。

以下是表格定义:

<dependency>
    <groupId>org.apache.spark</groupId>
    <artifactId>spark-core_2.10</artifactId>
    <version>1.2.1</version>
</dependency>
<dependency>
    <groupId>org.apache.spark</groupId>
    <artifactId>spark-sql_2.10</artifactId>
    <version>1.2.1</version>
</dependency>
<dependency>
    <groupId>com.datastax.spark</groupId>
    <artifactId>spark-cassandra-connector-java_2.10</artifactId>
    <version>1.2.1</version>
</dependency>

<dependency>
    <groupId>com.datastax</groupId>
    <artifactId>dse</artifactId>
    <version>version number</version>
    <scope>system</scope>
    <systemPath>${project.basedir}/lib/dse-4.7.0.jar</systemPath>
</dependency>

以下是代码:

TABLE_CATALOG TABLE_SCHEMA TABLE_NAME           TABLE_TYPE
PATRICK_DEV   dbo          FILE_DATE_PROCESSED  BASE TABLE

这就是我现在正在处理的问题:我在SQL中有一个如下所示的数据库:

try
{
    SqlConnection connect = new SqlConnection("Server=OMADB01;Database=PATRICK_DEV;Trusted_Connection=True;");
    connect.Open();

    SqlCommand command = new SqlCommand("INSERT FILE_DATE_PROCESSED(UID, FILE_DATE_PROCESSED, FILE_NAME, DATE_ENTERED) SELECT newid(), '2015-12-31 19:32:45', 'myfilename.txt', getdate()", connect);

    SqlDataReader reader = null;
    reader = command.ExecuteReader();

    while (reader.Read())
    {
        Console.WriteLine(reader["FILE_DATE_PROCESSED"].ToString());
        Console.WriteLine(reader["DATE_ENTERED"].ToString());
    }

    connect.Close();
}
catch (Exception e)
{
   Console.WriteLine(e.ToString());
}

在此数据库中,每次添加文件时,第2列应包含我上次输入文件的时间,第4列应包含我现在输入文件的时间。这是我正在寻找的结果:

UID FILE_DATE_PROCESSED FILE_NAME DATE_ENTERED

如果解决这个问题的方法与我发布的不同,请告诉我,我会非常感激。

2 个答案:

答案 0 :(得分:0)

你没有选择陈述。更改为添加带名称的select语句可能会有所帮助:

     @cmdText = @"DECLARE @FILE_DATE_PROCESSED DATETIME = '2015-12-31 19:32:45',
            @DATE_ENTERED DATETIME =getdate()
    INSERT FILE_DATE_PROCESSED(UID, FILE_DATE_PROCESSED, FILE_NAME, DATE_ENTERED) 
    SELECT newid(), @FILE_DATE_PROCESSED, 'myfilename.txt',@DATE_ENTERED
    SELECT @FILE_DATE_PROCESSED AS FILE_DATE_PROCESSED, @DATE_ENTERED as DATE_ENTERED"
 SqlCommand command = new SqlCommand(@cmdText)

答案 1 :(得分:0)

您的查询执行INSERT(IE。向表中添加数据)它不会检索任何记录。 T-SQL could use a SELECT subquery中的INSERT语句,用于提供INSERT后列出的列所请求的值。

因此,每次运行时,您的查询都会添加一条新记录,但该查询没有返回任何列,并且在不存在的列上使用读取器索引器会产生上述错误。

如果您只想阅读值,则应将查询更改为

try
{
    using(SqlConnection connect = new SqlConnection(....))
    using(SqlCommand command = new SqlCommand(
        @"SELECT FILE_DATE_PROCESSED, DATE_ENTERED FROM FILE_DATE_PROCESSED", connect))
    {
        connect.Open();
        using(SqlDataReader reader = command.ExecuteReader())
        {
           while (reader.Read())
           {
                 Console.WriteLine(reader["FILE_DATE_PROCESSED"].ToString());
                 Console.WriteLine(reader["DATE_ENTERED"].ToString());
           }
        }
   }
}
catch (Exception e)
{
   Console.WriteLine(e.ToString());
}

我建议更改列名FILE_DATE_PROCESSED或表名,因为有两个具有相同名称的对象可能是一个无尽的混淆源和一个出色的错误制造者