标签: system.data

使用CommandType.Tabledirect的目的是什么

可能我使用直接查询从表中检索记录,有时也使用存储过程.我在使用SP时将命令类型称为CommandType.StoredProcedure.我还看到另一个名为CommandType.Tabledirect的选项,在其他地方搜索,但不清楚它.任何人都可以帮助我了解它吗?请给我一些示例代码.

c# asp.net sql-server-2008 system.data

29
推荐指数
1
解决办法
4万
查看次数

'4'和'4'在主键中发生冲突,但在文件系统中不发生冲突

DataTable有主键来存储有关文件的信息.恰好有2个文件的名称与符号'4'和'4'(0xff14,"全宽数字四"符号)不同.由于唯一性失败,DataTable无法包含它们.但是,在Windows文件系统中,它们似乎能够共存而没有任何问题.

这种行为似乎不依赖于语言环境设置,我将"Region&Language-> Formats-> Format"从英语更改为日语,"非unicode程序语言"也发生了变化.Locale打印为"jp-JP","en-GB".总是一样的结果.

问题:

  1. 修复它的方法会不那么干扰?我可以切换到使用容器而不是System.Data.*但我想避免它.是否可以为列定义自定义比较器或以其他方式更好地检查唯一性?启用区分大小写(将解决此问题)会导致其他问题.
  2. 某些全局设置是否有可能在不重建软件的情况下修复它?

失败的演示程序:

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)

c# windows unicode system.data

16
推荐指数
1
解决办法
172
查看次数

.NET系统类型为SqlDbType

我正在寻找.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)

c# ado.net system.data

14
推荐指数
2
解决办法
1万
查看次数

如何使用Active Directory通用身份验证打开System.Data.SQLClient.SQLConnection

我使用以下代码连接到使用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?如果是,我在代码中要做的改变是什么?

在此输入图像描述

c# ado.net azure system.data azure-sql-database

14
推荐指数
1
解决办法
1485
查看次数

在C#中:为什么System.Data.DataRow上没有'Item'?

我正在重写/转换一些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同时存在于......

c# system.data

9
推荐指数
1
解决办法
1万
查看次数

自定义.NET数据提供程序

是否可以使用自定义.NET数据提供程序而无需在GAC中安装它?

我可以引用自定义DLL并在配置文件中注册吗?

.net ado.net dataprovider system.data dbproviderfactories

8
推荐指数
1
解决办法
3107
查看次数

如何手动/以编程方式创建DataRow?

我的项目的代码库有一个遗留方法,它将DataRow作为一个参数,我想创建一个单元测试方法.

如何手动创建DataRow对象以传递给方法?该System.Data.DataRow班没有一个面向公众的构造.

c# system.data

8
推荐指数
2
解决办法
8049
查看次数

c#单元测试,模拟存储过程

在过去,当我实施单元测试时,我一直在努力为数据访问层设置"体面"的单元测试,因为它们通常将数据库作为外部依赖.在理想的世界中,我会模拟存储过程调用,以便删除外部依赖项.

但是,我一直无法解决如何使用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)

c# unit-testing stored-procedures mocking system.data

7
推荐指数
1
解决办法
4819
查看次数

SqlDataReader.GetSqlBinary vs SqlDataReader.GetSqlBytes?

在命名空间下System.Data.SqlClient,我们有SqlDataReader.GetSqlBinarySqlDataReader.GetSqlBytes.

两者似乎都给出了"原始数据".如果是这样,他们之间有什么区别?

.net sql-server sqlclient system.data

6
推荐指数
1
解决办法
1794
查看次数

未找到System.Data程序集

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 Serverdll可能正在引用2.0文件夹.

c# .net-assembly system.data

6
推荐指数
1
解决办法
2万
查看次数