Tag: sql server

表有2个外键entity framework

我有一个由2个外键组成的表。 这些只是表格的元素。 该表旨在创建其他2个表之间的关联。 例如:表是Users_Products,只有2列是UserId和ProductID,都是外键。 当我从数据库生成EF对象时,它没有创建Users_Products对象,它只自动创建导航属性。 现在如何使用EF在我的Users_Products表中插入数据?

从文本文件导入到SQL Server数据库,是ADO.NET太慢了吗?

我的程序现在仍在运行,以将数据从日志文件导入远程SQL Server数据库。 日志文件大小约为80MB,包含大约470000行,包含大约25000行数据。 我的程序只能导入300行/秒,这真的很糟糕。 🙁 public static int ImportData(string strPath) { //NameValueCollection collection = ConfigurationManager.AppSettings; using (TextReader sr = new StreamReader(strPath)) { sr.ReadLine(); //ignore three first lines of log file sr.ReadLine(); sr.ReadLine(); string strLine; var cn = new SqlConnection(ConnectionString); cn.Open(); while ((strLine = sr.ReadLine()) != null) { { if (strLine.Trim() != “”) //if not a […]

通过存储过程将数据列表返回给dapper

我试图通过存储过程使用Dapper返回数据 我的DTO类与下面类似(为简洁起见,删除了一些属性) public class CarDTO { public int CarID { get; set; } public string Manufacturer { get; set; } public List CarOptions { get; set; } } 所以基本上在DB中我有一个CarOption表,它有一个CarID列 – 即Car可以有很多选项。 我分钟的DAL层呼叫如下: private string getCarDataSp = “[dbo].[GetCarData]”; public IEnumerable GetCarData(int customerId, int year) { return Get(db => db.Query(getCarDataSp , new { CustomerID = customerId, Year […]

基于本地文件的SQL Server

我为一个使用SQL Server作为其数据库的客户端编写了一个相当大的C#Winforms应用程序。 这最初是为内部使用而设计和开发的。 他们已经决定将他们的缩减版本许可给他们的客户,以及在内部使用完整版本。 虽然缩减版本将存储的一些数据将通过调用Web服务发送到我们的服务器,但是需要将大多数数据存储在本地。 我的大部分数据库经验都使用了SQL Server的安装。 但是,理想情况下,在这种情况下,它应该将数据存储在基于本地文件的数据库中(无需安装和配置数据库服务器)。 他们的客户不太可能具有技术头脑,他们只需要一个安装该软件的setup.exe,它就可以工作了。 我的大多数.NET代码都使用Linq-to-Sql与数据库进行通信。 在这种情况下,本地数据库的最佳选择是什么,这应该允许我仍然使用现有的Linq代码?

检查数据库记录映射中的空值

如何检查附加代码中的db null值? 请理解我是一个新的C#转换… 此代码的作用是获取IDataReader对象并将其转换并映射到强类型的对象列表。 但我发现,当读取器中返回空列时,它完全出错。 变流器 internal class Converter where T : new() { // Declare our _converter delegate readonly Func _converter; // Declare our internal dataReader readonly IDataReader dataReader; // Build our mapping based on the properties in the class/type we’ve passed in to the class private Func GetMapFunc() { // declare our field […]

从Console App或SQLCLR对象调用函数时处理连接的最佳方法(“Context Connection = true”)

我的数据层中有以下类型的代码,可以从控制台应用程序,Windows应用程序等调用,并从相应的调用者的App.Config文件中读取正确的连接字符串: public static udsDataset GetDataset(int datasetID) { string connectionString = ConfigurationManager.ConnectionStrings[“ConnectionString”].ConnectionString; string sql = @”select * from Dataset WHERE DatasetID=@datasetID”; using (SqlConnection conn = new SqlConnection(connectionString)) { // Dapper query: return conn.Query(sql, new {datasetID } ).First(); } } 我现在想从SQLCLR存储过程(在存在这些表的数据库中)调用相同的代码,您通常使用上下文连接 : using(SqlConnection connection = new SqlConnection(“context connection=true”)) { connection.Open(); // etc etc etc } 想到的最明显的方法是重载函数: public […]

使用MVC5,Ajax,C#和MSSQL Server级联DropdownList

来自Windows窗体和3层架构的MVC我很陌生。 我试图找出使用从数据库填充的级联下拉列表(DDL)。 我正在使用MS SQL Server 2012,VS 2013 目前我正在处理用户问卷,用户可以从DDL的多个答案中进行选择。 取决于一些选择,我需要在下一个问题上更改答案(再次DDL)。 数据库: 表DDLStacks : StackId | StackName 1 | Berry 2 | BerryColor 3 …. 表DDLStackContents (SCId堆栈内容id,索引目的) SCId | StackId | GroupId | Key | Value ————————————– 1 | 1 | Null | 1 | Grape 2 | 1 | Null | 2 | Avocado 3 | […]

使用sql server express为ac#.net winform应用程序创建多个用户

我在sql server express中有一个sql数据库。 我有一个登录MAINLOGIN,用于此数据库。 我希望通过多个用户U1,U2,U3在这个数据库中插入数据,每个用户都有不同的用户ID和密码。 这些用户将由MAINLOGIN手动或通过winform应用程序创建。 因此,在创建MAINLOGIN时,我会允许他进一步创建登录。 为此,我该怎么办? 我无法创建MULTIPLE用户,因为对于一个数据库,只能在一次登录时创建一个用户。 所以我应该创建多个登录,L1,L2,L3,然后映射,U1,U2,U3到他们。 或者,有更好的方法吗? 像应用程序角色等 我不想使用Windows身份validation。 因为如果我知道系统密码,那么我可以通过应用程序简单地连接sql并插入错误的数据。

Linq-To-SQL多次访问数据库

我试图通过在数据库的一次访问中包含子属性来提高我的Linq-to-SQL查询的效率。 我开始尝试各种linq查询来实现这一目标。 查询变得越来越复杂,所以我尝试了LoadWith()选项: 我的DAL类的构造函数设置LoadWith()设置: public TrackerJobData() { dataLoadOptions = new DataLoadOptions(); dataLoadOptions.LoadWith(x => x.SpecBarcodeRecords); dataLoadOptions.LoadWith(x => x.TrackerJobEquipmentTriggerRecords); dataLoadOptions.LoadWith(x => x.EtaRecord); this.Database.LoadOptions = dataLoadOptions; } 这是我正在使用的查询: public TrackerJob GetItem(int trackerJobId) { TrackerJobRecord record = (from trackerJob in this.Database.TrackerJobRecords where trackerJob.TrackerJobId == trackerJobId select trackerJob).FirstOrDefault(); return record.Map(); } 当我在linq查询 (而不是返回) 上调试和F10 时 ,我在SQL事件探查器中获得此输出: 请原谅我对SQL事件探测器的无知,但是三条突出显示的行是否意味着从客户端(我的代码)到服务器有三次往返? 如果是这样,为什么? SQL Server是否会在一次旅行中执行多个sp_executesql调用? […]

创建应用程序数据的快照 – 最佳实践

我们有一个使用.NET FW 4.0在C#中开发的文本处理应用程序,其中管理员可以定义各种设置。 所有这些“设置”数据都驻留在大约50个具有外键关系和Identity主键的表中(我认为这会使它变得棘手)。 整个数据库不超过100K记录,平均表有大约6个短列。 该系统基于MS SQL 2008 R2 Express数据库。 我们需要创建所有这些数据的快照,以便系统管理员可以随时回滚到其中一个快照。 我们只需要保留最后5个快照。 必须从应用程序GUI开始创建快照,因此必要时必须回滚到任何快照(由于拒绝直接访问数据库,因此不允许使用SSMS)。 系统仍在开发中(我们真的完成了吗?)这意味着新表和列会多次添加。 因此,我们需要一个可以自动处理更改的强大方法(在插入/更改列之后挖掘代码是我们想要避免的,除非没有其他方法)。 最好的方法是告诉“我想创建名称以’Admin’开头的所有表的快照”。 显然,这是一项数据库密集型任务,但由于它仅在紧急情况下使用,这是我不介意的事情。 我也不介意是否发生表锁,因为在创建或回滚快照的过程中,没有人会尝试使用这些表。 问题可分为两部分: 创建快照 回滚到快照 关于问题#1。 我们可能有两种选择: 将数据导出为XML(文件或数据库列) 将SQL中的数据复制到相同或不同的表中(例如,再次使用与前缀为“Backup”的原始表相同的名称创建相同的表结构)。 关于问题#2。 我看到的最大问题是如何将所有数据重新导入到外键关联表中,这些表使用IDENTITY列进行PK生成。 我需要删除所有受影响的表中的所有数据,然后重新导入所有数据,同时暂时放宽FK约束并关闭身份生成。 加载数据后,我应检查FK约束是否仍然正常。 或许我应该找到一种加载表的逻辑方式,以便在加载时可以保留约束检查(因为我们没有无法管理的表数,这可能是一个可行的解决方案)。 当然,出于显而易见的原因,我需要在单个事务中进行所有删除和重新加载。 我怀疑可能没有基于SQL的纯解决方案,尽管SQL CLR可能有助于避免将数据移出SQL Server。 我们面临同样的问题吗? 也许有人成功解决了这样的问题? 我不指望一步一步的指导。 任何有关从何处开始,获取哪些路径(导出到RAW XML或在数据库中保存快照或两者)的帮助,优点/缺点都非常有用。 谢谢你的帮助和时间。 丹尼尔