getting error with getint(0) in c#

本文关键字:in error with getint getting | 更新日期: 2023-09-27 18:14:30

在此代码中,我有一个错误读取列,我的数据库阅读器从查询中获得。错误在

这一行
DbCom.CommandText = System.String.Format("INSERT into Cortex(IdDA,Vlsd) values({0},'yes')",DbReader.GetInt16(0));

他们说行或列中没有数据,但它确实存在。

public static void Main(string[] args)
        {
            using (OdbcConnection DbConnection = new OdbcConnection("DSN=savior"))
            {
                DbConnection.Open();
                OdbcCommand DbCommand = DbConnection.CreateCommand();
                DbCommand.CommandText = "SELECT IDA FROM Dchas";
                try
                {
                    DbReader = DbCommand.ExecuteReader();
                    int fCount = DbReader.FieldCount;
                    if (fCount > 0)
                    {
                        do
                        {
                            using (OdbcConnection DbConnect = new OdbcConnection("DSN=savior"))
                            {
                                DbConnect.Open();
                                OdbcCommand DbCom = DbConnect.CreateCommand();
                                DbCom.CommandText = System.String.Format("INSERT into Cortex(IdDA,Vlsd) values({0},'yes')",DbReader.GetInt16(0));
                                try
                                {
                                    DbCom.ExecuteNonQuery();
                                }
                                catch (OdbcException ex)
                                {
                                    Console.WriteLine("Executing the query2 failed.");
                                    Console.WriteLine("The OdbcCommand returned the following message");
                                    Console.WriteLine(ex.ToString());
                                    return;
                                }
                            }
                        } while (DbReader.Read());
                    }
                    else
                    {
                        Console.WriteLine("Query affected row(s)");
                        return;
                    }
                }
                catch (OdbcException ex)
                {
                    Console.WriteLine("Executing the query1 failed.");
                    Console.WriteLine("The OdbcCommand returned the following message");
                    Console.WriteLine(ex.ToString());
                    return;
                }
            }
        }

getting error with getint(0) in c#

在尝试访问DBReader数据之前,您正在进入do..while loop而没有调用DBReader.Read

最好的解决方法是将循环改为
while(DBReader.Read())
{
    .....
}
如果Reader查询没有返回任何记录
,这将避免进入循环。

请注意,如果使用数据库已经提供的特性,可以节省大量代码(以及许多类似的潜在错误)。将记录从一个表复制到另一个表是您应该让数据库担心的事情:

    public static void Main(string[] args)
    {
        using (var connection = new OdbcConnection("DSN=savior"))
        {
            const string Sql = "INSERT INTO Cortex( IdDA, Vlsd ) SELECT IDA, 'yes' FROM Dchas";
            connection.Open();
            using(var command = new OdbcCommand(Sql))
            {
                int numberOfRecords = command.ExecuteNonQuery();
                Console.WriteLine("Copied {0} rows.", numberOfRecords);
            }
        }
     }