首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何将数据库中的值返回给变量

如何将数据库中的值返回给变量
EN

Stack Overflow用户
提问于 2016-07-08 10:42:54
回答 2查看 362关注 0票数 0
代码语言:javascript
运行
复制
static float ExecuteQueryWithResult_fl(SqlConnection connection, string query)
        {
            using (SqlCommand command = new SqlCommand(query, connection))
            {
                float prev_val = ((float)command.ExecuteScalar());
                return prev_val;
            }
        }

打电话:

代码语言:javascript
运行
复制
float f = ExecuteQueryWithResult_fl(connection, prev_status);

我是在与服务器通信的客户端应用程序中使用这一点的,每当这一行即将执行时:连接中断!不出差错。有什么问题吗??

代码语言:javascript
运行
复制
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());
                    }                  
            }

        }

错误: System.InvalidCastException:指定的强制转换无效

PS :我可以从数据库中获得字符串&字节值,这种情况只发生在float和int中。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-07-08 10:51:37

尝试以下操作,并确保您的连接已经打开。

代码语言:javascript
运行
复制
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);
           }
     }

更新:将查询替换为:

代码语言:javascript
运行
复制
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);
票数 1
EN

Stack Overflow用户

发布于 2016-07-08 10:50:31

你的长相..。可用(尽管我非常关心您是如何传递参数的);您的代码在这样的调用下工作得很好:

代码语言:javascript
运行
复制
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#中的C#与Server数据类型之间的差异)
  • 将值连接到查询中的无效SQL (这是非常糟糕的事情)

与正在吞咽Exception而不向您显示的调用代码相结合。调试器会告诉您,一旦您有一个断点的位置,不工作。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38264692

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档