在ADO.NET中创build参数时,我通常会设置列大小 但是,如果列是VARCHAR(MAX)我使用什么大小? cmd.Parameters.Add("@blah", SqlDbType.VarChar, ?????).Value = blah;
在Google上找不到与entity framework/ MySQL相关的任何东西,所以我希望有人知道。
SqlConnection , SqlCommand和SqlDataReader都实现了IDisposable接口。 我阅读了最佳做法,始终将IDisposables换成using块。 所以,查询数据的常见情况看起来像这样(当然,在更大的背景下,像linq2sql这样的映射工具将是合适的,但是假设我们想在这里使用这种方法): using (SqlConnection cn = new SqlConnection("myConnectionstring")) { using (SqlCommand cm = new SqlCommand("myQuery", cn)) { // maybe add sql parameters using (SqlDataReader reader = cm.ExecuteReader()) { // read values from reader object return myReadValues; } } } 这是正确的方式还是可以被认为是矫枉过正? 我对using块的这种嵌套级别有些不确定,但是当然我想要正确的做法。 谢谢!
继几个教程后,我能够成功创build一个集合类,它inheritance创build一个DataTable所需的function,该DataTable可以作为表值parameter passing给Sql Server的存储过程。 一切似乎都运作良好; 我可以添加所有行,看起来很漂亮。 但是,仔细观察后,我注意到当我添加一个新行时,所有前面的行的数据被新行的值覆盖。 所以,如果我有一个string值为“foo”的行,并添加了第二行的值“bar”,第二行将被插入(使两行DataTable),但两行将有值“bar ”。 任何人都可以看到这是为什么? 下面是一些代码,它的工作原理虽然简单一些(为了便于说明,标签类已经缩小了)。 以下是Collection类的: using System; using System.Collections.Generic; using System.Data; using System.Linq; using System.Web; using Microsoft.SqlServer.Server; namespace TagTableBuilder { public class TagCollection : List<Tag>, IEnumerable<SqlDataRecord> { IEnumerator<SqlDataRecord> IEnumerable<SqlDataRecord>.GetEnumerator() { var sdr = new SqlDataRecord( new SqlMetaData("Tag", SqlDbType.NVarChar) ); foreach (Tag t in this) { sdr.SetSqlString(0, t.tagName); yield return […]
我想用SqlDataAdapter插入一行到数据库中。 我在CustomerOrders数据库中有两个表(Custormers&Orders),有超过一千个logging。 我想创build一个graphics用户界面(TextBoxes),用于将新的客户和订单添加到数据库到其各自的表中。 我应该怎么做? 我想通常遵循的方法是 dataAdapter = new SqlDataAdapter (sqlQuery, conn); dataSet = new DataSet(); da.Fill(dataSet); 现在从文本框中取值(或使用DataBinding),将新行添加到dataSet中并调用 da.Update(dataSet); 但问题是为什么我应该使用da.Fill(dataSet)首先获取所有其他logging到数据集? 我只想添加一个新的logging。 为此,我正在做的是在DataSet中创build数据库的模式。 喜欢这个: DataSet customerOrders = new DataSet("CustomerOrders"); DataTable customers = customerOrders.Tables.Add("Customers"); DataTable orders = customerOrders.Tables.Add("Orders"); customers.Columns.Add("CustomerID", Type.GetType("System.Int32")); customers.Columns.Add("FirstName", Type.GetType("System.String")); customers.Columns.Add("LastName", Type.GetType("System.String")); customers.Columns.Add("Phone", Type.GetType("System.String")); customers.Columns.Add("Email", Type.GetType("System.String")); orders.Columns.Add("CustomerID", Type.GetType("System.Int32")); orders.Columns.Add("OrderID", Type.GetType("System.Int32")); orders.Columns.Add("OrderAmount", Type.GetType("System.Double")); orders.Columns.Add("OrderDate", Type.GetType("System.DateTime")); customerOrders.Relations.Add("Cust_Order_Rel", customerOrders.Tables["Customers"].Columns["CustomerID"], […]
我通常使用这样的代码: using (var connection = new SqlConnection(ConfigurationManager.ConnectionStrings["MyConn"].ConnectionString)) { var command = connection.CreateCommand(); command.CommandText = "…"; connection.Open(); command.ExecuteNonQuery(); } 我的command自动处理吗? 或者不是,我必须把它包装进using块? 是否需要处理SqlCommand ?
我刚开始阅读关于存储过程。 任何人都可以请帮助我在C#中的Oracle调用存储过程?
基本上Commands有Parameters和参数具有像Add , AddWithValue等function。在我看到的所有教程中,我通常注意到,他们正在使用Add而不是AddWithValue 。 .Parameters.Add("@ID", SqlDbType.Int) VS .Parameters.AddWithValue("@ID", 1) 有没有原因不使用AddWithValue ? 我宁愿使用它 Parameters.Add("@ID", SqlDbType.Int, 4).Value = 1 因为它节省了我的编码时间。 那哪个更好用? 哪个安全使用? 它提高了性能吗?
我正在做一个基本的东西在C#(MS VS2008),并有一个比正确的devise比特定的代码更多的问题。 我正在创build一个数据表,然后尝试从一个datareader(这是基于SQL存储过程)加载数据表。 我想知道的是,加载数据表最有效的方法是做一个while语句,或者是否有更好的方法。 对我来说,唯一的缺点是我必须手动input我想添加在我的while语句中的字段,但是我也不知道如何自动执行,因为我不希望SP中的所有字段都只是select字段,但这在我眼里并不是什么大事。 我将代码片段包含在我所做的全部内容之下,但对我来说,代码本身并不显着,甚至不是我所问的。 更多的是对我的方法感到疑惑,如果我的策略是错误的/效率低下的,我会在后面为代码提供帮助。 var dtWriteoffUpload = new DataTable(); dtWriteoffUpload.Columns.Add("Unit"); dtWriteoffUpload.Columns.Add("Year"); dtWriteoffUpload.Columns.Add("Period"); dtWriteoffUpload.Columns.Add("Acct"); dtWriteoffUpload.Columns.Add("Descr"); dtWriteoffUpload.Columns.Add("DEFERRAL_TYPE"); dtWriteoffUpload.Columns.Add("NDC_Indicator"); dtWriteoffUpload.Columns.Add("Mgmt Cd"); dtWriteoffUpload.Columns.Add("Prod"); dtWriteoffUpload.Columns.Add("Node"); dtWriteoffUpload.Columns.Add("Curve_Family"); dtWriteoffUpload.Columns.Add("Sum Amount"); dtWriteoffUpload.Columns.Add("Base Curr"); dtWriteoffUpload.Columns.Add("Ledger"); cmd = util.SqlConn.CreateCommand(); cmd.CommandTimeout = 1000; cmd.CommandType = CommandType.StoredProcedure; cmd.CommandText = "proc_writeoff_data_details"; cmd.Parameters.Add("@whoAmI", SqlDbType.VarChar).Value = WindowsIdentity.GetCurrent().Name; cmd.Parameters.Add("@parmEndDateKey", SqlDbType.VarChar).Value = myMostRecentActualDate; cmd.Parameters.Add("@countrykeys", SqlDbType.VarChar).Value = myCountryKey; cmd.Parameters.Add("@nodekeys", SqlDbType.VarChar).Value […]
我正在使用以下SQL查询和ExecuteScalar()方法从Oracle数据库中获取数据: sql = "select username from usermst where userid=2" string getusername = command.ExecuteScalar(); 它向我显示了这个错误消息: System.NullReferenceException:未将对象引用设置为对象的实例 当userid=2的数据库表中没有行时,会发生此错误 我应该如何处理这种情况?