如何将值从数据库返回到变量中
本文关键字:返回 变量 数据库 | 更新日期: 2023-09-27 17:55:51
static float ExecuteQueryWithResult_fl(SqlConnection connection, string query)
{
using (SqlCommand command = new SqlCommand(query, connection))
{
float prev_val = ((float)command.ExecuteScalar());
return prev_val;
}
}
叫:
float f = ExecuteQueryWithResult_fl(connection, prev_status);
我在与服务器通信的客户端应用程序中使用它,每当此行即将执行时:连接中断!没有错误出来.可能有什么问题??
public static void update_data_base(string type_id,int station, int ioa, byte by_val, float fl, uint bcr, bool is_float, bool is_bcr_iti,byte ov, byte bl, byte sb,byte nt, byte iv, byte seq, byte cy, byte ca)
{
string connectionString = "Data Source=(LocalDB)''MSSQLLocalDB;AttachDbFilename=C:''Users''Ahmed Aek Ben Jemia''Desktop''newest''command combo''1''iec104_master_slave_rtu''Combo_1.mdf;Integrated Security=True";
using (SqlConnection connection = new SqlConnection(connectionString))
{
string updateCommand = null,updateCommand1=null;
connection.Open();
ConnectionState state = connection.State;
float f = 0;
string prev_status = string.Format("SELECT STATUS FROM ") + type_id + string.Format("_Table WHERE ASDU={0} AND IOA={1}", station, ioa);
try
{
f = ExecuteQueryWithResult_fl(connection, prev_status);
}
catch (Exception e)
{
SetText2(e.ToString());
}
}
}
错误:系统无效转换异常:指定的强制转换无效
PS:我可以从数据库中获取字符串和字节值,这只发生在浮点数和整数上。
请尝试以下操作,并确保连接已打开。
static float ExecuteQueryWithResult_fl(SqlConnection connection, string query) {
try {
using (SqlCommand command = new SqlCommand(query, connection))
{
var prev_val = command.ExecuteScalar().ToString() == null ? default(float) : float.Parse(command.ExecuteScalar().ToString());;
return prev_val;
}
}
catch (Exception x)
{
Console.WriteLine("Error fetching due to {0}", x.Message);
return default(float);
}
}
更新:将查询替换为:
string prev_status = string.Format("SELECT cast(STATUS as float) prev_status FROM {0}_Table WHERE ASDU={1} AND IOA={2}",type_id, station, ioa);
你拥有的东西看起来...可用(尽管我非常关心您如何传入参数);您的代码在像这样调用时工作正常:
public static void Main()
{
float f;
using(var conn = new SqlConnection("Server=.;Integrated Security=SSPI"))
{
conn.Open();
f = ExecuteQueryWithResult_fl(conn, "select cast(1.23 as float(24))");
}
Console.WriteLine(f); // 1.23
}
所以问题不在于你展示的方法(本身)。若要了解正在发生的情况,应使用调试器并查看会发生什么。我的猜测是以下之一:
- 无效强制转换(C# 中的
float
与 SQL Server 数据类型之间的差异) - 将值连接到查询中的无效 SQL(这是一件非常非常糟糕的事情)
结合正在吞下Exception
而不向您显示的调用代码。调试器会在你的位置有一个不工作的断点后告诉你。