DataReader.GetFieldType(1)返回null

时间:2019-12-04 22:21:07

标签: sql sql-server geometry datareader

在VS 2017中,我有2个单独的解决方案,都引用了2个类库项目;一种用于SQL交互,另一种用于它们共享的用户表单。

在解决方案A中,一切正常。

在解决方案B中,我收到此错误:

  

{“ DataReader.GetFieldType(1)返回null。”}

当SQL项目执行存储过程时,该存储过程返回具有几何数据类型的表。可以在解决方案A中成功运行的同一类库中以相同的形式调用此方法。

两个解决方案都引用相同版本的Microsoft.SqlServer.Types.dll,并且两个解决方案都将其设置为“本地复制”。它们都具有标记为True的特定版本。

我能看到的唯一真正的区别是解决方案A有一个不同的Windows应用程序项目,该项目运行并调用这些Class项目。我已验证解决方案A和B中的两个Application项目都具有相同的参考文件/参考文件版本。

我还能在哪里寻找问题?

更新:

为简化起见,我创建了一个新的解决方案/新项目。    然后,通过程序包管理器:Install-Package Microsoft.SqlServer.Types    我向默认的Form1添加了一个按钮,并尝试执行存储过程,并返回了相同的错误。

请让我知道我还能提供什么参考。

SQL表: 在SQL Express(v 14.0.2027)

CREATE TABLE [dbo].[Lst_En_Field_Map](
    [Field_ID] [bigint] NOT NULL,
    [Polygon] [geometry] NOT NULL,
 CONSTRAINT [PK_Lst_En_Field_Map] PRIMARY KEY CLUSTERED 
(
    [Field_ID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
GO

SQL SP代码:

Create Procedure testProc as 
    Select * From  Lst_En_Field_Map
Go

Form1代码

private void button1_Click(object sender, EventArgs e)
{
 SqlCommand CMD = new SqlCommand("testProc");
    DataSet ds = ExecuteLocalCMD(CMD);
}

public static DataSet ExecuteLocalCMD(SqlCommand CMD)
{
    string connectionString = Yourconnectionstring;
    DataSet ds = new DataSet();

    try
    {
        SqlConnection connection = new SqlConnection(connectionString);
        CMD.Connection = connection;       
        CMD.CommandType = CommandType.StoredProcedure;      
        SqlDataAdapter adapter = new SqlDataAdapter(CMD);
        adapter.SelectCommand.CommandTimeout = 300;

        adapter.Fill(ds);
        connection.Close();
    }
    catch (Exception ex)
    {
        throw new Exception("Database Error: " + ex.Message);
    }

    return ds;
}

0 个答案:

没有答案