我有一小段代码反复创build了一个SqlDataAdapter对象。 为了简化我的调用,我用SqlCommandreplace了SqlDataAdapter ,并将SqlConnection移到了循环之外。 现在,每当我尝试编辑返回到我的DataTable的数据行时,我得到一个抛出不抛出的ReadOnlyException 。 注意:我有一个自定义函数,根据它的ID检索员工的全名。 为了简单起见,我在下面的示例代码中使用了“John Doe”来展示我的观点。 ExampleQueryOld与SqlDataAdapter一起使用 ; 每当我尝试写入DataRow的元素时, ExampleQueryNew都会失败并返回ReadOnlyException : ExampleQueryOld 这工作,没有问题: public static DataTable ExampleQueryOld(string targetItem, string[] sqlQueryStrings) { DataTable bigTable = new DataTable(); for (int i = 0; i < sqlQueryStrings.Length; i++) { string sqlText = sqlQueryStrings[i]; DataTable data = new DataTable(targetItem); using (SqlDataAdapter da = new SqlDataAdapter(sqlText, Global.Data.Connection)) { […]
.NET中的SqlCommand.CommandTimeout和SqlConnection.ConnectionTimeout是否有区别?
在这里关于一次性对象的其他问题 ,我们应该在使用块结束之前调用Close()吗? using (SqlConnection connection = new SqlConnection()) using (SqlCommand command = new SqlCommand()) { command.CommandText = "INSERT INTO YourMom (Amount) VALUES (1)"; command.CommandType = System.Data.CommandType.Text; connection.Open(); command.ExecuteNonQuery(); // Is this call necessary? connection.Close(); }
在SQL注入方面 ,我完全理解参数化string参数的必要性; 这是这本书中最古老的技巧之一。 但是,什么时候可以certificate不参数化一个SqlCommand呢? 任何数据types被认为是“安全的”,不参数化? 例如:我不认为自己在SQL专家附近的任何地方,但我不能想到任何情况下,它可能容易受到SQL注入接受一个bool或一个int ,只是连接到查询。 我的假设是正确的,还是可能在我的程序中留下一个巨大的安全漏洞? 为了澄清,这个问题被标记为C# ,这是一个强types的语言; 当我说“参数”,想像像 public int Query(int id) 。
我有一个MS SQL Server 2005数据库。 在几个过程中,我有表参数,我把它传递给一个存储过程作为一个nvarchar(用逗号分隔)和内部分为单个值。 我将它添加到SQL命令参数列表中,如下所示: cmd.Parameters.Add("@Logins", SqlDbType.NVarchar).Value = "jim18,jenny1975,cosmo"; 我必须将数据库迁移到SQL Server 2008.我知道有表值参数,我知道如何在存储过程中使用它们。 但我不知道如何传递一个SQL命令中的参数列表。 有没有人知道正确的Parameters.Add程序语法? 还是有另一种方式来传递这个参数?
我通常使用这样的代码: using (var connection = new SqlConnection(ConfigurationManager.ConnectionStrings["MyConn"].ConnectionString)) { var command = connection.CreateCommand(); command.CommandText = "…"; connection.Open(); command.ExecuteNonQuery(); } 我的command自动处理吗? 或者不是,我必须把它包装进using块? 是否需要处理SqlCommand ?
我可以有效地使用这种方法吗? using(SqlCommand cmd = new SqlCommand("GetSomething", new SqlConnection(Config.ConnectionString)) { cmd.Connection.Open(); // set up parameters and CommandType to StoredProcedure etc. etc. cmd.ExecuteNonQuery(); } 我关心的是:SqlCommand的Dispose方法(在退出using块时调用)是否会closures底层的SqlConnection对象?
将parameter passing给SQLCommand的最佳方法是什么? 你可以做: cmd.Parameters.Add("@Name", SqlDbType.VarChar, 20).Value = "Bob"; 要么 cmd.Parameters.Add("@Name", SqlDbType.VarChar).Value = "Bob"; 要么 cmd.Parameters.Add("@Name").Value = "Bob"; 看起来第一个可能在某种程度上“更好”,无论是在性能方面还是在错误检查方面。 但是我想更确切地知道。
我想从命令行导出和导入一个.sql文件到MySQL数据库和从MySQL数据库导入。 有没有任何命令导出MySQL中的.sql文件? 那我该如何导入呢? 进行导入时,可能会有一些限制,如启用/禁用外键检查或仅导出表结构 。 我们可以用mysqldump设置这些选项吗?
SqlConnection在事务中“入围”意味着什么? 这是否意味着我在连接上执行的命令将参与交易? 如果是这样的话,在什么情况下SqlConnection会自动列入一个环境TransactionScope事务? 请参阅代码注释中的问题。 我对每个问题答案的猜测都在括号内的每个问题之后。 场景1:打开连接在事务范围内 using (TransactionScope scope = new TransactionScope()) using (SqlConnection conn = ConnectToDB()) { // Q1: Is connection automatically enlisted in transaction? (Yes?) // // Q2: If I open (and run commands on) a second connection now, // with an identical connection string, // what, if any, is the relationship of […]