Tag: ado.net

如何知道抛出SqlException的实际问题?

我想在处理数据库操作时处理不同的问题。 例如,由于数据库凭据错误或由于网络问题,操作可能会失败。 或者它可能会失败,因为查询不正确(如果在int类型列中传递字符串值) 在我的C#代码中,我们只有SqlErrors ,它包含SqlErrors集合。 但是有很多严重程度。 如何轻松识别SqlException的原因? 如何确定exception是由于连接问题或身份validation失败或由于查询问题。 我正在使用SQL Server 2005。

如何使用SqlCommand使用参数化的db名称创建DATABASE?

简而言之。 我有两个简单的助手: private SqlCommand CreateCommand(string text) { SqlCommand cmd = new SqlCommand(); cmd.Connection = connection; cmd.CommandType = CommandType.Text; cmd.CommandText = text; return cmd; } void SetParameter(SqlCommand cmd, string p, string dbName) { cmd.Parameters.Add(p, SqlDbType.NVarChar); cmd.Parameters[p].Value = dbName; } 这执行OK: var cmd = CreateCommand(“CREATE DATABASE Demo “+ @”ON (FILENAME = N’c:\demo_data.mdf’) “+ @”LOG ON (FILENAME = […]

我需要一个Excel猜测数据类型问题的解决方法

我正在创建一个实用程序,用于将数据从Excel导入Oracle数据库, 我有一个固定的excel文件模板, 现在,当我尝试通过Jet提供程序和ADO.Net – Ole连接工具导入数据时,我发现了以下问题:由于列中存在混合数据类型,因此尚未导入某些列[string和数字], 我在互联网上寻找这个问题我发现原因是从Excel猜测数据类型 加载代码: connection = new OleDbConnection(@”Provider=Microsoft.Jet.OLEDB.4.0; Data Source={0};Extended Properties=Excel 8.0;”); string columns = “P_ID, FULL_NAME_AR, job_no, GENDER, BIRTH_DATE, RELIGION, MARITAL_STATUS, NAT_ID, JOB_Name, FIRST_HIRE_DATE, HIRE_DATE, CONTRACT_TYPE, GRADE_CODE, QUALIFICATION”; string sheetName = “[Emps$]”; OleDbCommand command = new OleDbCommand(string.Format(“select {0} from {1} where p_id is not null”, columns, sheetName), connection); connection.Open(); dr = […]

返回SqlDataReader

我有这个代码: public static SqlDataReader GetGeneralInformation ( int RecID ) { using ( var conn = new SqlConnection( GetConnectionString() ) ) using ( var cmd = conn.CreateCommand() ) { conn.Open(); cmd.CommandText = @”SELECT cs.Status, cs.Completed FROM NC_Steps s INNER JOIN NC_ClientSteps cs ON cs.RecID = s.RecID WHERE cs.ClientID = 162 AND s.RecID = @value”; cmd.Parameters.AddWithValue( “@value”, […]

无法连接到VS2012中的localDB – “建立与SQL Server的连接时出现与网络相关或特定于实例的错误…”

这很奇怪,因为我能够通过SSMS 2008R2使用相同的连接字符串连接到localDB(“ Data Source=(LocalDB)\v11.0;Integrated Security=true ”) 只有C#代码无法连接,我尝试使用Connect Timeout=60增加登录时间,但没有运气。 我也尝试过指定数据库Initial Catalog=<databasename> 其中是我通过ssms在localdb上创建的。 关于为什么这不连接的任何指针?

ADO.Netentity frameworkIEntityChangeTracker的多个实例不能引用实体对象

我正在尝试保存我的联系人,其中提到了ContactRelation(只是联系人,已婚,单身等的关系)和国家。 但每当我尝试保存我的联系人时,我都会得到例外“ADO.Netentity framework实例对象不能被IEntityChangeTracker的多个实例引用” public Contact CreateContact(Contact contact) { _entities.AddToContact(contact); //throws the exception _entities.SaveChanges(); return contact ; } 我正在使用松散耦合的MVC设计与服务和存储库。 我已经阅读了很多关于这个例外的post,但没有一个给我一个有效的答案…… 谢谢你,彼得

CommandType.Text与CommandType.StoredProcedure

显式使用StoredProcedure CommandType与仅使用Text Command相比有什么好处? 换句话说,是 cmd = new SqlCommand(“EXEC StoredProc(@p1, @p2)”); cmd.CommandType = CommandType.Text; cmd.Parameters.Add(“@p1”, 1); cmd.Parameters.Add(“@p2”, 2); 比任何更糟糕的 cmd = new SqlCommand(“StoredProc”); cmd.CommandType = CommandType.StoredProcedure; cmd.Parameters.Add(“@p1”, 1); cmd.Parameters.Add(“@p2”, 2); 编辑:修复了错误的复制粘贴作业(再次)。 此外,问题的重点是数据访问类。 我宁愿能够将存储的proc名称和参数传递到一行,而不是每个参数的额外行。

缺少库以引用OLEDB连接类型

我从SSIS Team Blog获得了以下代码来转换OLEDB连接类型,以便AcquireConnection()方法可以使用它。 现在我不确定为什么Dts.Connections部分不起作用。 我不知道我必须添加的库以使其工作。 我几乎添加了最重要的包括Dts.RuntimeWrap。 如果您需要有关该问题的更多信息,请与我们联系。 ConnectionManager cm = Dts.Connections[“oledb”]; Microsoft.SqlServer.Dts.Runtime.Wrapper.IDTSConnectionManagerDatabaseParameters100 cmParams = cm.InnerObject as Microsoft.SqlServer.Dts.Runtime.Wrapper.IDTSConnectionManagerDatabaseParameters100; OleDbConnection conn = cmParams.GetConnectionForSchema() as OleDbConnection; 编辑以下是此组件的完整代码。 using System; using System.Collections.Generic; using System.Data; using System.Data.SqlClient; using Microsoft.SqlServer.Dts.Runtime; using System.Data.OleDb; using System.Data.Common; using System.Linq; using System.Configuration; using System.Collections; //using System.Data.OleDb; namespace AOC.SqlServer.Dts.Tasks { [DtsTask( DisplayName = “Custom Logging Task”, […]

为什么var在“foreach(table.Rows中的var row)”中评估为System.Object?

当我进入这个foreach声明时…… foreach (var row in table.Rows) … var的工具提示说class System.Object 我很困惑,为什么它不是class System.Data.DataRow 。 (如果您想知道,是的,我在代码文件的顶部using System.Data 。) 如果我明确声明类型,如… foreach (DataRow row in table.Rows) …它没有错误,工作正常。 如果我这样做…… var numbers = new int[] { 1, 2, 3 }; foreach (var number in numbers) … var计算struct System.Int32 。 所以,问题不在于var在foreach子句中不起作用。 因此, DataRowCollection有些奇怪的地方,项目不会自动评估为DataRow 。 但我无法弄清楚它是什么。 有没有人有解释? 更新 我真的被撕裂了对Mark的回答(Codeka和Oliver)……最后,我决定标记Codeka,因为它真的回答了我的问题,但Oliver回答了我应该问的问题:)

SQL Server最快的插入,更新和选择方法

我使用SP,这不是SP vs代码隐藏“构建您的SQL命令”问题。 我正在寻找一种处理许多小事务的后端应用程序的高吞吐量方法。 我使用SQLDataReader进行大多数返回,因为转发仅在大多数情况下适用于我。 我已经看到它做了很多种方式,并且我自己也使用了大部分方法。 定义和接受存储过程参数作为参数本身的方法,并使用cmd.Parameters.Add构建(使用或不指定DB值类型和/或长度) 将SP参数及其值组装到数组或散列表中,然后传递给一个更抽象的方法来解析集合,然后运行cmd.Parameters.Add 表示表的类,根据需要初始化类,设置表示表字段的公共属性,以及调用Save,Load等方法 我确信还有其他我见过但现在也想不到的。 我对所有建议持开放态度。