C# 在c中获取getint(0)时出错#
在这段代码中,我在读取数据库读取器从查询中获取的列时出错。 错误在以下行中:C# 在c中获取getint(0)时出错#,c#,sql-server,C#,Sql Server,在这段代码中,我在读取数据库读取器从查询中获取的列时出错。 错误在以下行中: DbCom.CommandText = System.String.Format("INSERT into Cortex(IdDA,Vlsd) values({0},'yes')",DbReader.GetInt16(0)); 他们说,在ligne或column中没有数据,但它确实存在 public static void Main(string[] args) { using
DbCom.CommandText = System.String.Format("INSERT into Cortex(IdDA,Vlsd) values({0},'yes')",DbReader.GetInt16(0));
他们说,在ligne或column中没有数据,但它确实存在
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;
}
}
}
您正在输入
do..while循环
,而无需调用DBReader.Read,然后再尝试访问DBReader数据
最好的解决方法是将循环更改为
while(DBReader.Read())
{
.....
}
如果读卡器查询没有返回任何记录,这将避免进入循环。请注意,如果使用数据库已经提供的功能,您可以保存大量代码(以及许多潜在的错误,如该错误)。将记录从一个表复制到下一个表应该让数据库担心:
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);
}
}
}
我真的不明白你在这里写了什么?你从数据库中提取数据,然后逐个插入。那太没效率了。您可以指示数据库将其复制到数据库中,而无需通过网络将其推送到您的计算机上,然后将其逐个推回到数据库中。上面的6行与你的20行相同。是的,我同意,但在我的真实代码中,我确实有很多操作要应用于每个数据,而且,程序有时会遇到一些数据的其他问题,我必须知道它并捕获错误名称和。。。。为了每一个人。