在C#和Asp.net中使用SQL Server 2008的视图

5
我有一个包含数据库的C#/ASP.net项目,其中我开发了一个方便实用的视图。 我已经设置好了与我创建的SQL Server 2008数据库的SQL连接。 看起来连接正常,但我不知道如何在不将查询硬编码到程序中的情况下使用我创建的视图(有时被告知这样做是不好的?)。 这是我设置的连接:
    SqlConnection conn = null;
    conn = new SqlConnection("Data Source=raven\\sqlexpress;Initial Catalog=ucs;Integrated Security=True;Pooling=False");
    conn.Open(); 
    SqlCommand command = new SqlCommand(query, conn);

基本上,我需要一些代码来使用这个视图进行查询。我可以看到这个视图并查看可能获得的结果,但在程序中无法访问它!这个视图的名称是“UserView”。非常感谢您的帮助!

2个回答

13

你可以使用以下代码,但通常认为在.NET代码中放入硬编码的SQL命令是不好的做法。更好、更安全的方法是使用存储过程来代替。

以下示例代码可以帮助你入门,你可以将其修改为使用存储过程:

  1. command.CommandType 更改为指示它是一个存储过程调用
  2. 并向命令添加存储过程所需的正确参数。
  3. command.CommandText 更改为你的存储过程名称,从而消除硬编码的SQL。

示例代码如下:

using (SqlConnection connection = new SqlConnection("Data Source=raven\\sqlexpress;Initial Catalog=ucs;Integrated Security=True;Pooling=False"))
{
    using (SqlCommand command = connection.CreateCommand())
    {
        command.CommandText = "SELECT * from your_view WHERE your_where_clause";

        connection.Open();
        using (SqlDataReader reader = command.ExecuteReader())
        {
            while (reader.Read())
            {
                // process result
                reader.GetInt32(0); // get first column from view, assume it's a 32-bit int
                reader.GetString(1); // get second column from view, assume it's a string
                // etc.
            }
        }
    }
}

谢谢!这看起来没问题,我没意识到我可以直接从视图中选择。但是,我应该使用哪个程序集引用才能让我使用ResultSet和ExecuteQuery?两者都显示未知。我已经添加了“using System.Data.SqlClient”,还有其他我需要注意的吗? - ImGreg
@Greg - 我认为ResultSet是之前的编辑版本,因为我改用SqlDataReader了。上面的代码对你来说无法编译吗?我相信System.Data程序集应该为您解析这些类。 - dcp
@dcp - 好的,我们来看看,注意到了第一个编辑,但错过了下一个。编译很好,尚未测试,但看起来不错。谢谢!只是确认一下,while循环将遍历视图中的行,而内部的代码是如何获取每列数据的? - ImGreg
@Greg - 是的,reader.GetInt32(0),reader.GetString(1)等只是示例,您需要放入适合视图返回列的内容。但是,我仍然建议使用SP,从长远来看会更好。 - dcp
@dcp - 您说得对。我只是用这种方法来启动自己,但考虑到我需要处理的查询数量,存储过程绝对是更好的选择。感谢您的帮助! - ImGreg

-1

在使用VS2013的项目中添加一个新的DataSet。从服务器资源管理器中将您的视图拖动到DataSet设计面板上。


请提供更多详细信息以回答问题。 - dwitvliet
这个回答非常懒惰。如何精确地添加一个新的 DataSet,是从文件菜单、工具菜单还是通过编写特定的代码行?如果你只提供一半的真相,最好不要回答。 - Sizons

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接