Tag: ado.net

将大型数据表存储到数据库中的有效方法

我已经从文本文件动态创建了一个数据表。现在我需要将值存储在database.i中找到一些使用foreach和data行的示例,它工作正常 foreach (DataRow row in dt.Rows) { // insert statement } 我怀疑数据表可能包含数千行,使用foreach循环是否有效,或者我应该采用其他一些技术,如批量复制(我不知道它,所以请帮助我)。谢谢你

为什么我得到“没有重载方法需要两个参数”?

我在一个DLL中有一个方法: public static DataSet ExecuteDataset(string strcommandText,CommandType commandType,SqlParameter[] p) { CreateConnection(); da = new SqlDataAdapter(strcommandText, con); da.SelectCommand.CommandType = commandType; da.SelectCommand.Parameters.AddRange(p); ds = new DataSet(); da.Fill(ds); return ds; } 我在另一个DLL中编写了一个方法: public static DataSet GetDeptDetails() { string strcommandText = “sp_DeptDetails”; return SqlHelper.ExecuteDataset(strcommandText,CommandType.StoredProcedure); } 在这里,我收到此错误: 方法没有重载需要两个参数。 我究竟做错了什么?

当应用程序关闭时,DB连接会立即关闭吗?

这是我一直想知道的……会吗? 因为每当我编写代码来使用数据库连接时,我总会以某种方式确保在进入下一个进程之前关闭。 但是,当我有一个ChildWindow在其构造函数中打开一个连接而不是关闭它,直到它命中保存按钮或取消按钮。 然后,如果整个应用程序关闭,数据库连接会立即关闭吗? 或者它必须等待超时并自动关闭? 编辑: 所以我试图保持一个实时连接打开以记录我的应用程序上的所有错误: public App() { ErrorHelper errorHelper = new ErrorHelper(); // Will open DB connection AppDomain currentDomain = AppDomain.CurrentDomain; currentDomain.UnhandledException += new UnhandledExceptionEventHandler(currentDomain_UnhandledException); } /// /// For catch all exception and put them into log /// void currentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e) { errorHelper.WriteError(e.ExceptionObject as Exception); } 因为我不喜欢每次打开连接时都记录一个错误,所以我想一直保持连接打开。 这与我描述的OP类似。 在这种情况下,它始终保持连接打开。 但是数据库连接在退出后会立即关闭吗?

通过使用语句和Dispose为DataTable,SqlConnection,SqlCommand和SqlDataAdapter清理资源

我必须调用存储过程并获得结果。 我知道有很多方法可以做到这一点(与所有编程一样),我应该通过调用Dispose()和/或Close()来清理资源。 阅读这篇文章或处理问题我认为我应该使用using语句,这应该足够了。 以下是我打电话的方式。 我的问题是 – 我是否过于复杂,这会清理所有资源吗? private Int32 CallStoredProcedure(Int32 Id) { using (var dt = new DataTable()) { using (var conn = new SqlConnection(ConnectionString)) { using (var sqlCmd = new SqlCommand(“SEL_StoredProcedure”, conn)) { using (var sda = new SqlDataAdapter(sqlCmd)) { sqlCmd.CommandType = System.Data.CommandType.StoredProcedure; sqlCmd.Parameters.AddWithValue(“@ID”, Id); sqlCmd.Connection.Open(); sda.Fill(dt); } } } if (dt.Rows.Count == 1) […]

防止在Asp.net中使用ado.net并发执行SQL Server存储过程

我想阻止两个用户同时执行相同的存储过程。 如果两个asp.net请求进入执行该存储过程,那么这些请求应该以串行方式一个接一个地执行。 SQL Server数据库和执行由ado.net处理。 以下任何一种方法都有助于实现这一目标吗? 什么是最合适的方法? 有没有其他方法可以达到同样的目的? 通过将隔离级别设置为Serializable,使用ado.net事务执行存储过程 在存储过程中使用sp_getapplock并在最后释放

EF Code First:无法连接到SQL Server

我正在尝试使用代码优先方法创建数据库。 当我运行以下代码时,我收到以下exception。 我们怎样才能克服这一点? 笔记: 我的系统上有SQL Server 2008 R2。 我没有使用任何配置文件。 我假设它将使用约定创建数据库 没有开放的连接; 我刚刚重启系统并进行了测试。 仍然是同一个问题。 EntityFramework.dll的运行时版本是v4.0.3xxx 例外 : 提供程序未返回ProviderManifestToken字符串 消息 : 此操作需要连接到“主”数据库。 无法创建与“主”数据库的连接,因为已打开原始数据库连接并且已从连接字符串中删除凭据。 提供未打开的连接。 内在例外 : 建立与SQL Server的连接时发生与网络相关或特定于实例的错误。 服务器未找到或无法访问。 validation实例名称是否正确,以及SQL Server是否配置为允许远程连接。 (提供程序:命名管道提供程序,错误:40 – 无法打开与SQL Server的连接) 码: using System.Data.Entity; namespace LijosEF { public class Dinner { public int DinnerID { get; set; } public int Title { get; […]

属性或索引器无法分配 – 它是只读的

我在数据库中捕获出生日期和诊断日期,并希望按诊断日期计算年龄。 这是我的代码。 但我有错误跟随错误。 错误2属性或索引器’LightSwitchApplication.Patient.AgeAtDiagnosis’无法分配 – 它是只读的 partial void AgeAtDiagnosis_Compute(ref int result) { // Set result to the desired field value AgeAtDiagnosis = DateofDiagnosis.Year – DateofBirth.Year; if (DateofBirth > DateofDiagnosis.AddYears(-AgeAtDiagnosis)) { AgeAtDiagnosis–; } }

如何在更改数据库后保存DataSet?

如果我有一个名为myDs的DataSet,我通过循环中的直接访问来编辑其中的字段,如下所示: for (int i = 0; i < myDS.Tables[TableName].Rows.Count; i++) { //some function or web method to get the id value of the record being updated int n = getNewNumber(); //updating the dataset record according to some condition if (n == 0) { myDS.Tables[TableName].Rows[i]["id"] = n; myDS.Tables[TableName].Rows[i]["description"] = "some data"; } else { myDS.Tables[TableName].Rows[i]["id"] = […]

让SqlDataAdapter和SqlCommand混淆

我有这个调用方法: public string RunReportSteps(int _reportKey) { DataTable fStepsTable; fStepsTable = GetStepsTable(“xxx.console.pr_xxx”); return (string)fStepsTable.Rows[1][3]; } 它调用这个私有方法: private DataTable GetStepsTable(string procName) { var connectionString = ConfigurationManager.ConnectionStrings[“xxx”].ConnectionString; using(var conn = new SqlConnection(connectionString)) using(var adapt = new SqlDataAdapter()) using(var cmd = new SqlCommand(procName, conn)) { conn.Open(); SqlParameter p = new SqlParameter(“@ReportKey”, this.ReportKey); p.Direction = ParameterDirection.Input; cmd.Parameters.Add(p); adapt.SelectCommand = cmd; […]

在SQL Server中自动提交事务使用什么隔离级别?

当我使用SNAPSHOT隔离级别处理更新冲突问题时,似乎自动提交事务使用上次使用的隔离级别。 条件:ALLOW_SNAPSHOT_ISOLATION为ON,READ_COMMITTED_SNAPSHOT为OFF 步骤1:执行没有事务的更新语句 using (var sqlconn = new SqlConnection(“Data source=…”)) using (var sqlcmd = sqlconn.CreateCommand()) { sqlconn.Open(); sqlcmd.CommandText = “Update …” sqlcmd.ExecuteNonQuery(); } 然后我看一下sys.md_exec_sessions ,发现事务隔离级别是sys.md_exec_sessions 。 步骤2:使用SNAPSHOT隔离级别的事务执行update语句 using (var sqlconn = new SqlConnection(“Data source=…”)) { sqlconn.Open(); using (var sqltran = sqlconn.BeginTransaction(IsolationLevel.Snapshot)) using (var sqlcmd = sqlconn.CreateCommand()) { sqlconn.Open(); sqlcmd.CommandText = “Update …” sqlcmd.ExecuteNonQuery(); } } […]