- - PR -
ASP.NET + PostgreSQL でエラーが出てしまいます。
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 ご存知の方がいらっしゃいましたら 是非ご教授願います。 よろしくお願いします。 | ||||||||
|
投稿日時: 2006-02-18 21:48
まず、この意味を理解するところから始めてみてはどうでしょう?ソースを引っ張ってくる以前の問題のように思います。 せっかくソースが書いてあるのでざっと見ましたが、OleDbConnection, OleDbDataAdapter, DataSet, DataTable は、IDisposable インターフェイスを実装しています。これは、「アンマネージドリソースを使っているから、使い終わったら解放してやってね」という印です。使い終わったら、必ず Dispose メソッドをコールしてください。 コールの一例:
小言: オープンソースを利用するなら、0から100まで「自分で何とかできる」ことが前提だと思うんですけど。つまり、セキュリティリスクを含めて、ということです。 |
1