在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;
}