- PR -

ASP.NET + PostgreSQL でエラーが出てしまいます。

1
投稿者投稿内容
ジ・オ
会議室デビュー日: 2006/02/16
投稿数: 1
投稿日時: 2006-02-16 16:23
こんにちは。
とある書籍を元に ASP.NET+PostgreSQL でシステムの構築をはじめたところです。

書籍では ASP.NET+SQLServer でしたので すんなり出来たのですが
本番環境となるデータベースを PostgreSQL にしたところエラーが出てしまい
いろいろと調べてみましたが 見当がつかなかったので投稿しました。



《エラーメッセージ》

'/VBTrading' アプリケーションでサーバー エラーが発生しました。

FATAL: invalid command-line arguments for server process HINT: Try "postgres --help" for more information.
説明 : 現在の Web 要求を実行中に、ハンドルされていない例外が発生しました。エラーに関する詳細および例外の発生場所については、スタック トレースを参照してください。

例外の詳細: System.Data.OleDb.OleDbException: FATAL: invalid command-line arguments for server process HINT: Try "postgres --help" for more information.



開発環境は Visual Studio .net 2003 を使用しています。

サンプルでは SQLServer ・・・ .NET Framework Data Provider for SQL Server を使用しているのですが
本番では PostgreSQL ・・・ .NET Framework Data Provider for OLE DB になるのではないかと思います。



ソースは以下の通りです。




《Web.config》

<configuration>
・・・
<appSettings>
・・・
<add key="ConnectionString" value="provider=PostgreSQL; user id=postgres; password=admin; location=testdb; data source=xxxx.xxx.xxx.xxx; port=xxxx;" />
・・・
</appSettings>
</configuration>



《accessData.vb》

Imports System.Data.OleDb

Public Class accessData

Private Shared Function getSqlConn() As OleDb.OleDbConnection
Return New OleDb.OleDbConnection(ConfigurationSettings.AppSettings("ConnectionString"))
End Function

Public Shared Function selectBySQL(ByVal sqlstr As String) As DataSet
Dim conn As OleDb.OleDbConnection = getSqlConn()
Dim selectcmd As OleDb.OleDbCommand = New OleDb.OleDbCommand(sqlstr, conn)
selectcmd.CommandTimeout = 15
Dim dadpt As OleDb.OleDbDataAdapter = New OleDb.OleDbDataAdapter(selectcmd)
Dim dset As DataSet = New DataSet
dadpt.Fill(dset)
Return dset
End Function

Public Shared Function executeBySQL(ByVal sqlstr As String) As Boolean

Dim xret As Boolean
Dim conn As OleDb.OleDbConnection = getSqlConn()
conn.Open()
Dim execmd As New OleDb.OleDbCommand
Dim tran As OleDb.OleDbTransaction

tran = conn.BeginTransaction(IsolationLevel.Serializable)
execmd.Connection = conn
execmd.Transaction = tran
Try
execmd.CommandText = sqlstr
execmd.ExecuteNonQuery()
tran.Commit()
conn.Close()
xret = True
Catch ex As Exception
tran.Rollback()
conn.Close()
xret = False
End Try

Return xret

End Function

End Class



《test.aspx》

Public Class test

Inherits System.Web.UI.Page

#この呼び出しは Web フォーム デザイナで必要です。

Public setM_CUST As DataSet

Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

If Me.IsPostBack Then
Exit Sub
End If

Dim sqlstr As String = "SELECT aaa, bbb, ccc FROM db" & _
" ORDER BY aaa, bbb, cccc, ddd"

setM_CUST = accessData.selectBySQL(sqlstr)

DataBind()

End Sub

・・・

End Class



ご存知の方がいらっしゃいましたら 是非ご教授願います。

よろしくお願いします。
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2006-02-18 21:48
引用:

ジ・オさんの書き込み (2006-02-16 16:23) より:

《エラーメッセージ》

'/VBTrading' アプリケーションでサーバー エラーが発生しました。

FATAL: invalid command-line arguments for server process HINT: Try "postgres --help" for more information.


 まず、この意味を理解するところから始めてみてはどうでしょう?ソースを引っ張ってくる以前の問題のように思います。

 せっかくソースが書いてあるのでざっと見ましたが、OleDbConnection, OleDbDataAdapter, DataSet, DataTable は、IDisposable インターフェイスを実装しています。これは、「アンマネージドリソースを使っているから、使い終わったら解放してやってね」という印です。使い終わったら、必ず Dispose メソッドをコールしてください。

コールの一例:
コード:
Dim Connection As OleDbConnection = Nothing
Try
    Connection = コネクション取得()
    Connection.Open()
    ' コネクションを使って何かする
    ...
    Connection.Close()

Finally
    If Not Connection Is Nothing Then
        Connection.Dispose()
    End If
End Try





小言:
 オープンソースを利用するなら、0から100まで「自分で何とかできる」ことが前提だと思うんですけど。つまり、セキュリティリスクを含めて、ということです。
1

スキルアップ/キャリアアップ(JOB@IT)