【问题标题】:How to SELECT * from an wcf application, database hosted in appharbor如何从 wcf 应用程序、appharbor 中托管的数据库中选择 *
【发布时间】:2016-03-04 20:33:17
【问题描述】:

这是我第一次在 Visual Studio (2015) 中使用 WCF,我遇到了一些问题。 我的数据库托管在 appharbor 中。我设法将新项目插入到数据库中:

    public Test Insert (Test TestTable)
    {
        SqlConnection conGet = new SqlConnection(connectionString);
        SqlCommand cmd = new SqlCommand(connectionString, conGet);
        cmd.Parameters.AddWithValue("@testID", testTable.testID);
        cmd.Parameters.AddWithValue("@testName", testTable.testName);

        conGet.Open();
        cmd.CommandText = "INSERT INTO TestTable (testID, testName) VALUES (@testID, @testName)";
        cmd.ExecuteScalar();
        conGet.Close();
        return testTable;
    }

问题:当我尝试从中选择时:

    public Test GetData(Test test)
    {
        SqlConnection conPut = new SqlConnection(connectionString);
        SqlCommand cmd = new SqlCommand("SELECT * FROM TestTable", conPut);
        conPut.Open();
        SqlDataReader rd = cmd.ExecuteReader();
        if (rd.Depth>0)
        {
            while (rd.Read())
            {
                test.testID = (int)rd["testID"];
                test.testName = rd["testName"].ToString();
            }
        }
        else
        {
            Console.WriteLine("No rows found.");
        }
        conPut.Close();
        return test;
    }

rd (SqlDataReader) 没有读取任何内容,只是返回一个空值,即使测试表中有行。

请指点一下好吗?网上试了好几​​种方法,都不行。。谢谢!

【问题讨论】:

    标签: visual-studio wcf appharbor


    【解决方案1】:

    删除深度测试。 Sql DataProvider 不支持该属性。它总是零

    来源:MSDN SqlDataReader.Depth

    最外层表的深度为零。 .NET 框架数据 SQL Server Provider 不支持嵌套,总是返回 零。

    如果你想测试没有行的情况,那么使用属性HasRows

    SqlDataReader rd = cmd.ExecuteReader();
    if (rd.HasRows)
    {
        while (rd.Read())
        {
            test.testID = (int)rd["testID"];
            test.testName = rd["testName"].ToString();
        }
    }
    else
    {
        Console.WriteLine("No rows found.");
    }
    

    【讨论】:

    • 您好,感谢您的回复。我试过了,现在它突出显示 test.testID = (int)rd["testID"] 并说“在 CMMS-WCF.dll 中发生了 'System.InvalidCastException' 类型的异常,但未在用户代码中处理。附加信息: 指定的演员表无效。”该表是通过类型“char”创建的,所以我尝试执行 test.testID = (char)rd["testID"] 但这也没有用...有什么建议吗?
    • 当您转换为 (char) 时,错误是否相同?您确定查询检索到的每一行在所涉及的列中都有值吗? testID 列的大小是多少?我们不能直接转换类型不正确或为空的东西。 char 类型的列是 NET 的字符串。看看MSDN上关于SQL vs NET type mappings的这个页面
    • 是的......我得到了同样的错误。这些列具有价值。以下是表的创建方式:
    • 抱歉,我看不到此信息。了解如何正确提取 rd["fieldName"] 的值很重要。字段集合在 NET 中被键入为对象,我们需要应用正确的转换
    • 嗨史蒂夫,对不起,看起来它没有通过。我按照您的建议将属性类型更改为字符串,它起作用了!感谢:D。我只有最后一个问题。为了获取所有数据,我必须将所有内容都放入一个列表中。但是我需要返回一个对象。我试图投射它,但它没有用......还有其他方法吗?谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-27
    • 1970-01-01
    • 1970-01-01
    • 2021-12-24
    相关资源
    最近更新 更多