我有一台Debian Jessie(i386)机器,带有mono complete、mono xsp和postgresql-9.5(来自http://apt.postgresql.org/
我有一个简单的gridview你好,世界风格的页面。
以下是Web.config的摘录:

<compilation debug="true">
  <assemblies>
    <add assembly="Npgsql, Version=2.0.0.0, Culture=neutral, PublicKeyToken=5d8b90d52f46fda7"/>
  </assemblies>
</compilation>
<system.data>
  <DbProviderFactories>
    <add name="Npgsql Data Provider"
           invariant="Npgsql"
           support="FF"
           description ="Data Provider for PostgreSQL"
           type="Npgsql.NpgsqlFactory, Npgsql" />
  </DbProviderFactories>
</system.data>
<system.web>
  <customErrors mode="Off"/>
  <trace enabled="true" localOnly="false" pageOutput="true" requestLimit="100" traceMode="SortByTime" />
</system.web>
<connectionStrings>
  <add name="SqlDataSource1" connectionString="Server=127.0.0.1,5432;Database=test;User ID=user;Password=password;" providerName="Npgsql"/>
</connectionStrings>

(在装配线上将版本更改为“4.0.0.0”没有区别)
我得到以下异常:
System.IO.IO异常
连接丢失
描述:HTTP 500。处理请求时出错。
详细信息:非web异常。异常源(应用程序或对象的名称):Mono.Data.Tds。
异常堆栈跟踪:
位于:0中的Mono.Data.Tds.Protocol.TdsComm.GetPhysicalPacketHeader()[0x00000]
位于:0中的Mono.Data.Tds.Protocol.TdsComm.GetPhysicalPacket()[0x00000]
在0中的Mono.Data.Tds.Protocol.TdsComm.GetByte()[0x00000]处
在0中的Mono.Data.Tds.Protocol.Tds.ProcessSubPacket()[0x00000]处
位于Mono.Data.Tds.Protocol.Tds.NextResult()[0x00000]in:0
在0中的Mono.Data.Tds.Protocol.Tds.SkipToEnd()[0x00000]处
postgresql日志显示如下:
[未知]@[未知]日志:启动数据包的长度无效
有人知道我应该从哪里开始寻找问题吗?

最佳答案

解决了。
原来我省略了asp:SqlDataSource标记上的ProviderName属性。
正确的asp:SqlDataSource标记(4.0)如下所示:

<asp:SqlDataSource ID="SqlDataSource1" ConnectionString="<%$ ConnectionStrings:ConnStr2 %>" ProviderName="Npgsql" runat="server" SelectCommand="select * from test"></asp:SqlDataSource>

相关的Web.config条目:
....
<system.data>
  <DbProviderFactories>
     <add name="Npgsql Data Provider"
          invariant="Npgsql"
          support="FF"
          description ="Data Provider for PostgreSQL"
          type="Npgsql.NpgsqlFactory, Npgsql" />
  </DbProviderFactories>
</system.data>
...
<connectionStrings>
  <add name="ConnStr2" connectionString="Server=127.0.0.1;Database=database;User ID=user;Password=password;" providerName="Npgsql"/>

关于asp.net - 如何使Npgsql连接到Postgresql 9.5,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40821171/

10-11 02:03