可能我使用直接查询从表中检索记录,有时也使用存储过程.我在使用SP时将命令类型称为CommandType.StoredProcedure.我还看到另一个名为CommandType.Tabledirect的选项,在其他地方搜索,但不清楚它.任何人都可以帮助我了解它吗?请给我一些示例代码.
DataTable有主键来存储有关文件的信息.恰好有2个文件的名称与符号'4'和'4'(0xff14,"全宽数字四"符号)不同.由于唯一性失败,DataTable无法包含它们.但是,在Windows文件系统中,它们似乎能够共存而没有任何问题.
这种行为似乎不依赖于语言环境设置,我将"Region&Language-> Formats-> Format"从英语更改为日语,"非unicode程序语言"也发生了变化.Locale打印为"jp-JP","en-GB".总是一样的结果.
问题:
失败的演示程序:
using System;
using System.Data;
namespace DataTableUniqueness
{
class Program
{
static void Main(string[] args)
{
var changes = new DataTable("Rows");
var column = new DataColumn { DataType = Type.GetType("System.String"), ColumnName = "File" };
changes.Columns.Add(column);
var primKey = new DataColumn[1];
primKey[0] = column;
changes.PrimaryKey = primKey;
changes.Rows.Add("4.txt");
try
{
changes.Rows.Add("?.txt"); // throws the exception
}
catch (Exception e)
{
Console.WriteLine("Exception: {0}", e);
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
例外
Exception: System.Data.ConstraintException: Column 'File' is constrained …
Run Code Online (Sandbox Code Playgroud) 我正在寻找.Net System.Type和SqlDbType之间的智能转换.我发现它是以下想法:
private static SqlDbType TypeToSqlDbType(Type t)
{
String name = t.Name;
SqlDbType val = SqlDbType.VarChar; // default value
try
{
if (name.Contains("16") || name.Contains("32") || name.Contains("64"))
{
name = name.Substring(0, name.Length - 2);
}
val = (SqlDbType)Enum.Parse(typeof(SqlDbType), name, true);
}
catch (Exception)
{
// add error handling to suit your taste
}
return val;
}
Run Code Online (Sandbox Code Playgroud)
上面的代码不是很好,是一个代码气味,这就是为什么我写了以下,天真,不聪明,但有用的功能,基于https://msdn.microsoft.com/en-us/library/cc716729( v = vs.110).aspx:
public static SqlDbType ConvertiTipo(Type giveType)
{
var typeMap = new Dictionary<Type, SqlDbType>();
typeMap[typeof(string)] = SqlDbType.NVarChar;
typeMap[typeof(char[])] = SqlDbType.NVarChar; …
Run Code Online (Sandbox Code Playgroud) 我使用以下代码连接到使用Active Directory集成身份验证的SQL Azure DB.
private string GenerateConnectionString(string databaseName, string serverName)
{
SqlConnectionStringBuilder connBuilder = new SqlConnectionStringBuilder();
sqlConnectionBuilder.DataSource = string.Format(
"tcp:{0}.database.windows.net",
serverName);
connBuilder.InitialCatalog = databaseName;
connBuilder.Authentication = SqlAuthenticationMethod.ActiveDirectoryIntegrated;
connBuilder.ConnectTimeout = 30;
return connBuilder.ConnectionString;
}
Run Code Online (Sandbox Code Playgroud)
身份验证从Active Directory集成身份验证更改为Active Directory通用身份验证,以支持多因素身份验证.
我看到枚举
System.Data.SqlClient.SqlAuthenticationMethod
没有Active Directory通用身份验证的值.是否仍然可以使用System.Data.SqlClient
连接到DB?如果是,我在代码中要做的改变是什么?
我正在重写/转换一些VB代码:
Dim dt As New System.Data.DataTable()
Dim dr As System.Data.DataRow = dt.NewRow()
Dim item = dr.Item("myItem")
Run Code Online (Sandbox Code Playgroud)
C#:
System.Data.DataTable dt = new System.Data.DataTable();
System.Data.DataRow dr = dt.NewRow();
var item = dr.Item["myItem"];
Run Code Online (Sandbox Code Playgroud)
我不能让它在C#下运行,我遇到的问题是第三行var item = dr.Item["myItem"];
:
System.Data.DataRow' does not contain a definition for 'Item' and no extension method 'Item' accepting a first argument of type 'System.Data.DataRow' could be found (are you missing a using directive or an assembly reference?)
我System.Data
在两个项目中引用了第4版.我在这里错过了什么?注意:ItemArray同时存在于......
是否可以使用自定义.NET数据提供程序而无需在GAC中安装它?
我可以引用自定义DLL并在配置文件中注册吗?
我的项目的代码库有一个遗留方法,它将DataRow作为一个参数,我想创建一个单元测试方法.
如何手动创建DataRow对象以传递给方法?该System.Data.DataRow
班没有一个面向公众的构造.
在过去,当我实施单元测试时,我一直在努力为数据访问层设置"体面"的单元测试,因为它们通常将数据库作为外部依赖.在理想的世界中,我会模拟存储过程调用,以便删除外部依赖项.
但是,我一直无法解决如何使用MOQ模拟框架,或找到任何其他支持此框架的框架.相反,我已经恢复创建一个包含已知数据的脚本化测试数据库(这样我总能得到我期望的输出),但这与模拟该层略有不同.
任何人都可以建议如何模拟数据访问层的这一部分[我知道实体框架https://effort.codeplex.com/存在]?
public object RunStoredProc()
{
//Some Setup
using (SqlConnection conn = new SqlConnection(CONNNECTION_STRING))
{
using (SqlCommand comm = new SqlCommand("storedProcName", conn))
{
conn.Open();
comm.CommandType = CommandType.StoredProcedure;
using (SqlDataReader reader = comm.ExecuteReader())
{
while (reader.Read())
{
//Logic
}
}
}
}
//Return object based on logic
}
Run Code Online (Sandbox Code Playgroud)
那么如何模拟存储过程输出以SQLDataReader
包含指定的数据.在更高的级别,我可以模拟该RunStoredProc()
方法 - 但这无助于我测试该方法中的逻辑是否正确.或者,我可以将其SQLReader
剥离成另一种方法
public object RunStoredProc()
{
//Some Setup
List<object> data = GetData();
//Logic
//Return object based on logic
}
private List<object> …
Run Code Online (Sandbox Code Playgroud) 在命名空间下System.Data.SqlClient
,我们有SqlDataReader.GetSqlBinary
和SqlDataReader.GetSqlBytes.
两者似乎都给出了"原始数据".如果是这样,他们之间有什么区别?
我System.Data
在我的Windows服务项目中有一个参考.我一直得到Exception
:
无法加载文件或程序集'System.Data,Version = 4.0.0.0,Culture = neutral,PublicKeyToken = b77a5c561934e089'或其依赖项之一.该系统找不到指定的文件.
我附上FusionLog
我的代码并发现以下内容.对于System.Data
只有Visual Studio是寻找在这里:
程序集管理器从:C:\ windows\Microsoft.NET\Framework\v2.0.50727\mscorwks.dll加载
它应该在这里看(所有其他程序集都是System.Data)
程序集管理器从:C:\ windows\Microsoft.NET\Framework\v4.0.30319\clr.dll加载
如何指向我的System.Data
文件以查找正确的位置?
我的猜测是Microsoft Commerce Server
dll可能正在引用2.0文件夹.
system.data ×10
c# ×8
ado.net ×3
.net ×2
asp.net ×1
azure ×1
dataprovider ×1
mocking ×1
sql-server ×1
sqlclient ×1
unicode ×1
unit-testing ×1
windows ×1