小编Ste*_*eve的帖子

你在哪里把SQL语句放在你的c#项目中?

我可能会负责将vb6应用程序移植到c#.此应用程序是一个与访问数据库交互的Windows应用程序.数据访问封装在基本业务对象中.基本上一个表的一个类.现有的vb6业务对象通过DAO读写DB.我以前写了几次DAL和ORM,但它们都只针对SQL Server.这个将需要目标访问和SQL服务器.在以前的项目中,我会将SQL字符串放在业务对象的私有部分中,并可能将冗余的sql代码(如连接,创建命令)移动到公共基类中以减少代码.

这一次,我正在考虑将SQL字符串写入.settings文件或其他键/值类型文本文件.然后我会编写一个sql实用程序来编辑这个文件,并允许我运行并测试参数化查询.这些查询将在业务对象中按名称引用,而不是将sql嵌入到代码中.

我知道一种标准方法是为每个目标数据库创建一个DAL,并具有要使用的DAL配置状态.我真的不想为每个数据库创建两个DAL类.如果我只是通过keyname引用了正确的查询并且具有正确的连接类型,那么似乎代码会更少.

那么,你们这样做吗?你怎么会或者你有没有解决这个问题?什么最适合你?

谢谢!

c# sql orm data-access-layer winforms

25
推荐指数
2
解决办法
2万
查看次数

C#Xml序列化列表<T>后代与Xml属性

早上好,

我有一个从List下载并拥有公共属性的集合.Xml序列化程序没有提升我的能力.列表项序列化很好.我尝试过XmlAttribute属性无济于事.你们有解决方案吗?

    public partial class MainWindow : Window
{
    public MainWindow()
    {
        InitializeComponent();
    }
    private void button1_Click(object sender, RoutedEventArgs e)
    {
        var people = new PersonCollection
        {
            new Person { FirstName="Sue", Age=17 },
            new Person { FirstName="Joe", Age=21 }
        };
        people.FavoritePerson = "Sue";

        var x = new XmlSerializer(people.GetType());
        var b = new StringBuilder();
        var w = XmlTextWriter.Create(b, new XmlWriterSettings { NewLineChars = "\r\n", Indent = true });
        x.Serialize(w, people);
        var s = b.ToString();
    }
}

[XmlRoot(ElementName="People")]
public class PersonCollection : …
Run Code Online (Sandbox Code Playgroud)

c# generics attributes list xmlserializer

13
推荐指数
1
解决办法
5468
查看次数

XmlSerializer序列化通用接口列表

我正在尝试使用XmlSerializer来持久化List(T),其中T是一个接口.序列化器不喜欢接口.我很好奇是否有一种简单的方法可以使用XmlSerializer轻松地序列化异构对象列表.这就是我想要的:

    public interface IAnimal
    {
        int Age();
    }
    public class Dog : IAnimal
    {
        public int Age()
        {
            return 1;
        }
    }
    public class Cat : IAnimal
    {
        public int Age()
        {
            return 1;
        }
    }

    private void button1_Click(object sender, RoutedEventArgs e)
    {
        var animals = new List<IAnimal>
        {
            new Dog(),
            new Cat()
        };

        var x = new XmlSerializer(animals.GetType());
        var b = new StringBuilder();
        var w = XmlTextWriter.Create(b, new XmlWriterSettings { NewLineChars = "\r\n", Indent = true });
        //FAIL - …
Run Code Online (Sandbox Code Playgroud)

c# interface list xml-serialization xmlserializer

12
推荐指数
3
解决办法
3万
查看次数

WPF从DataTrigger设置Image.Source

我正在尝试DataTriggerImage元素定义一个元素,以便它显示连接/断开连接的图像.我不断收到Invalid PropertyDescriptor消息.有任何想法吗?

<Image>
    <Image.Style>
      <Style>
        <Style.Triggers>
          <DataTrigger Binding="{Binding Source={x:Static my:Server.Instance}, Path=Connected, Mode=OneWay}"
                       Value="True">
            <Setter Property="Source"
                    Value="serverconnected.png"/>
          </DataTrigger>

        </Style.Triggers>
      </Style>
    </Image.Style>
</Image>
Run Code Online (Sandbox Code Playgroud)

wpf styles image datatrigger

10
推荐指数
2
解决办法
1万
查看次数

C#为class和operator =分配默认属性

问题1:

我有一个简单的winforms应用程序,我希望DataBind我的Person.Name属性到一个文本框.名称的类型为StringField.我最初将Name属性定义为String.数据绑定在值类型(如String)上非常有用.我希望StringField.Value属性是StringField的默认属性.我想在textBox中看到StringField.Value的值而不是文本"FieldApp.StringField".

问题2:

我希望能够使用operator =将字符串分配给StringField.此赋值将导致设置StringField.Value成员.

这可以实现吗?

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace FieldApp
{
    public class StringField
    {
        public string Value { get; set; }    
    }

    public class Person
    {

        //private String _Name;
        //public String Name
        //{
        //    get { return _Name; }
        //    set { _Name = value; }
        //}

        //public Person(string name)
        //{
        //    Name = name;
        //}

        private StringField _Name;
        public StringField Name
        {
            get { …
Run Code Online (Sandbox Code Playgroud)

c# default properties

6
推荐指数
1
解决办法
2万
查看次数

我的查询类.你的意见?

我只是想分享这个Query类,并对它有所了解.Query类有助于对dbconnection执行查询.我没有包含实现,发布有点多.这是一个示例调用,你会明白这个想法:

OrdersDataTable table = 
   new Query(connection)
   .Table("Orders")
   .Fields("OrderID,CustomerID,Description,Amount")
   .GreaterThan("OrderID", 1000)
   .OrderBy("OrderID")
   .Execute<OrdersDataTable>();
Run Code Online (Sandbox Code Playgroud)

以下是我喜欢上课的原因:

  • 无需编写ADO.NET命令代码.调用此类占用的行数少于ADO.NET等效行.
  • 每个成员函数都返回此值,因此可以将多个调用链接在一起.我不确定这个模式是否有名称.你知道吗?
  • 处理MySql,OleDb和SqlServer方言.
  • 对于我来说,似乎比ADO.NET等等更易读.
  • 通话顺序无关紧要.所有参数都在内部集合中缓冲,并在调用Execute时读取.
  • 我的场景要求我与多个数据库产品进行通信,因此我希望以通用方式编写查询一次,并传递给定的连接.利用存储过程等特定于数据库的功能会有很多麻烦.

我有一个内部使用此类的DAL.UI将调用DAL,传递一些查询参数并返回DataTable.该类确实帮助减少了LOC的DAL实现,并使其更具可读性.

这是一个DAL调用示例:

OrdersDataTable orders = Orders.GetByOrderId( 1 )
Run Code Online (Sandbox Code Playgroud)

并且impl:

public static OrdersDataTable GetByOrderId( int id )
{
    return  
       new Query(connection)
       .Table("Orders")
       .Fields("OrderID,CustomerID,Description,Amount")
       .Equals("OrderID", id)
       .Execute<OrdersDataTable>();
}
Run Code Online (Sandbox Code Playgroud)

谢谢!

编辑:感谢大家的好评.很多人都建议使用LinqToSql.我没有选择Linq,因为Microsoft目前只支持Sql Server.我需要查询Jet,MySql和Sql Server表.

有人询问如何构造AND和OR子句.这是每个例子

//and example
    public static OrdersDataTable GetByOrderIdAndCustomerId( int orderId, int customerId )
    {
        return  
           new Query(connection)
           .Table("Orders")
           .Fields("OrderID,CustomerID,Description,Amount")
           .Equals("OrderID", orderId)
           .Equals("CustomerID", customerId)
           .Execute<OrdersDataTable>();
    }

//or example
    public static OrdersDataTable GetByOrderIdOrCustomerId( int …
Run Code Online (Sandbox Code Playgroud)

c# ado.net

6
推荐指数
1
解决办法
1641
查看次数

列出<object []>使用比DataTable更多的内存?

我一直认为DataTable会消耗比通用List更多的内存.我正在测试加载DataTable并从SQL Server查询加载List.在这种情况下,DataTable消耗的内存较少.我得到了前2000行,每行有134个字段.一个二进制字段,其余为标准varchar,int,bit等.

在这个世界上,如果DataTable的所有开销都比List少,那么它的内存消耗量是多少?GC使用DataTable报告大约4mb,使用列表报告5mb.

我测试了一些NorthWind表,在这些情况下列表略小.

private void GetMemory()
    {
        label1.Text = string.Format("{0:0.00} MB", GC.GetTotalMemory(true) / 1024.0 / 1024.0);            
    }
    private void DataTableButton_Click(object sender, EventArgs e)
    {
        var conn = new SqlConnection(@"Initial Catalog=ADatabase;Data Source=AServer;Integrated Security=True");
        conn.Open();

        var cmd = new SqlCommand("SELECT TOP 2000 * FROM AManyColumnedTable", conn);

        var r = cmd.ExecuteReader();
        _rows = new List<object[]>();

        //uses more memory
        object[] a = null;
        while (r.Read())
        {
            a = new object[r.FieldCount];
            r.GetValues(a);
            _rows.Add(a);
        }
        //uses less memory
        //_table = new DataTable("TheTable");
        //_table.Load(r);

        r.Close();
        conn.Close(); …
Run Code Online (Sandbox Code Playgroud)

c# datatable ado.net

5
推荐指数
1
解决办法
3126
查看次数

使用INSERTED的SQL Server插入语句来获取新ID和现有ID

我正在将记录从一个sql server db插入另一个.我需要获取新插入的id并更新源表上的字段.我可以通过INSERTED选项获取新ID没问题.但是,我似乎无法从源表中获取ID.目标表没有源ID的字段.源表是转换表,我不想用转换字段污染目标表.这可能是不可能的,但我想我先和你们一起检查一下.

drop table #Table1
CREATE TABLE #Table1
(
    Table1ID INT,
    Table2ID INT,
    NAME VARCHAR(32)
)

INSERT INTO #Table1
VALUES 
      (1, NULL, 'Fred')
     ,(2, NULL, 'Tom')
     ,(3, NULL, 'Sally')     

--ok, im inserting into #Table2
drop table #Table2
CREATE TABLE #Table2
(
    [Table2ID] [int] IDENTITY(1,1) NOT NULL,
    NAME VARCHAR(32)
)

--THE RUB, I want to insert Table2ID into table3 
--along with Table1ID. I cannot seem to reference table1
--Any Ideas?
insert into #Table2(NAME)
OUTPUT INSERTED.Table2ID, T.Table1ID into #Table3
select Name …
Run Code Online (Sandbox Code Playgroud)

sql-server identity insert

5
推荐指数
1
解决办法
1434
查看次数

tsql使用与通配符和尾随空格一样?

我无法使用类似的语句来处理空格和尾随通配符.我的查询如下:

select * from Table where Field like 'Desc_%'

数据以空格分隔,例如Desc Top,Desc Bottom等.当我使用模式'Desc_%'时查询有效,但当我使用模式'Desc%'时查询无效.该字段为nvarchar(255).

有任何想法吗?

编辑

事实证明数据是制表符分隔的,当我从2008 Management Studio复制一个值时,它将选项卡转换为空格.愚蠢的错误.我确实喜欢[]提示,所以我给它标记了答案.谢谢大家,我会记得不相信网格结果中的副本.

t-sql space wildcard sql-like

5
推荐指数
1
解决办法
7540
查看次数

将 is 运算符与泛型接口一起使用

我有一些实现通用非通用接口的通用类。我创建通用对象并将它们添加到列表中。我如何使用 LINQ 或任何其他方法来按泛型类型过滤列表。我不需要在运行时知道 T 。我向接口添加了一个类型属性,并使用 LINQ 通过它进行过滤,但我希望使用 is 运算符。这是我整理的一个简单的例子。

有任何想法吗?

interface IOperation
    {
        object GetValue();
    }
    class Add<T> : IOperation
    {
        public object GetValue()
        {
            return 0.0;
        }
    }
    class Multiply<T> : IOperation
    {
        public object GetValue()
        {
            return 0.0;
        }
    }


    private void Form1_Load(object sender, EventArgs e)
    {
        //create some generics referenced by interface
        var operations = new List<IOperation>
        {
            new Add<int>(),
            new Add<double>(),
            new Multiply<int>()
        };

        //how do I use LINQ to find all intances off Add<T> 
        //without …
Run Code Online (Sandbox Code Playgroud)

c# generics interface operators

3
推荐指数
1
解决办法
1596
查看次数

是否实现了两个接口?

我正在写一个返回DataTable和IEnumerable的类.除了返回类型之外,我无法完全定义接口方法.所以,我希望我可以创建这个接口(显然,它不会编译):

interface IMyInterface
    {
        DataTable GetResults();
        IEnumerable<string> GetResults();
    }
Run Code Online (Sandbox Code Playgroud)

那么,你将如何构造这两个函数,重命名它们,多个接口,参数?

我只是好奇你们将如何处理它,ty ...

c# oop interface

1
推荐指数
1
解决办法
122
查看次数