目前可以使用C#4.0从SQL Server检索数据的方法是什么?

时间:2011-11-22 10:43:56

标签: c# sql-server

假设我在C#中有一个包含与SQL Server数据库表中的字段对应的文本框的表单,我想从表中提取数据并填充文本框。

从VS2005开始,我熟悉以下代码模式:

command = conn.CreateCommand();
command.CommandText = "SELECT * FROM Customer WHERE ID = " + CustId;
reader = command.ExecuteReader();
FormCustomer.textBoxName = reader.GetString(reader.GetOrdinal("Name"));
FormCustomer.textBoxAddress = reader.GetString(reader.GetOrdinal("Address"));
FormCustomer.textBoxSuburb = reader.GetString(reader.GetOrdinal("Suburb"));

目前在C#4.0中使用VS2010执行此操作的方法是什么?

5 个答案:

答案 0 :(得分:5)

你获得它的方式当然是一种选择,尽管你应该使用参数化SQL而不是动态创建SQL。 (我希望你也有适当的using陈述来关闭连接等。)

其他选择:

这只是我的头脑。肯定会有更多。

答案 1 :(得分:1)

看看SimpleData项目:

  

需要易于使用的数据库访问组件   这可以防止SQL注入攻击而不需要很多   样板ADO.NET代码或预生成的ORM模型。灵感来自   Ruby的ActiveRecord和DataMapper宝石。

使用SimpleData,您的代码将如下所示:

var customer = db.Customer.FindById(CustId);

FormCustomer.textBoxName = customer.Name;
FormCustomer.textBoxAddress = customer.Address;
FormCustomer.textBoxSuburb = customer.Suburb;

答案 2 :(得分:1)

Linq to SQL: http://msdn.microsoft.com/en-us/library/bb386976.aspx

实体框架: http://msdn.microsoft.com/en-us/library/aa697427%28v=vs.80%29.aspx

长话短说,后者是从Linq女士到SQL的主要ORM工具,这是一个从小而简单的事情开始的好方法。

答案 3 :(得分:1)

没有单一的“目前接受”方式;我很懒,所以我用的是小巧玲珑;所以我的方法是:

var cust = conn.Query(
    "select Name, Address, Suburb from Customer where Id = @CustId",
    new {CustId}).Single();
FormCustomer.textBoxName = cust.Name;
FormCustomer.textBoxAddress = cust.Address;
FormCustomer.textBoxSuburb = cust.Suburb;

还有Query<T>等填充类型对象,但在上面dynamic用法(如图所示)可能没问题。 new {CustId}指定参数 - 完全命名,键入和SQL注入安全(注意匿名类型中的CustId与TSQL中的@CustId匹配)。没有搞乱命令和读者,非常快。

答案 4 :(得分:0)

这取决于你必须做什么。您的代码当然仍然有效,并且没有明确的模式,但它是面向连接的。另一种方法是使用DataSet,SqlDataAdapter等的“无连接”方法。请看这里:http://www.csharp-station.com/Tutorial/AdoDotNet/Lesson05

编辑:这是一个带有SqlDataAdapter的版本:

DataSet dsCustomers = new DataSet();
SqlDataAdapter daCustomers = 
         new SqlDataAdapter("SELECT * FROM Customer WHERE ID = " + CustId, conn);
SqlCommandBuilder cmdBldr = new SqlCommandBuilder(daCustomers);
daCustomers.Fill(dsCustomers, tableName);