PaceMedlem sedan juni 20015 947 inlägg
Public Function dbDataSet (ByVal strSQL As String)
Dim objAdapter As Object
Select Case Lcase(DatabaseType)
Case "sqlserver"
[red]objAdapter = New SqlDataAdapter(strSQL, objConn)[/red]
Case "access", "mysql"
[red]objAdapter = New OleDbDataAdapter(strSQL, objConn)[/red]
Case Else
[red]objAdapter = New OdbcDataAdapter(strSQL, objConn)[/red]
End Select
Dim objDataSet As New DataSet()
objAdapter.Fill(objDataSet)
Return objDataSet
End Function
Det rödmarkerade retunerar följande felmeddelande från vbc.exe. Byter jag plats på parametrarna strSQL och objConn så fungerar det - alltså måste det vara någon slags datatypfel - men vad? :q
objConn är definerad som "public" i klassen.
error BC30519: Overload resolution failed because no accessible 'New' can be called without a narrowing conversion:
'Public Overloads Sub New(selectCommandText As String, selectConnection As System.Data.SqlClient.SqlConnection)': Argument matching parameter 'selectConnection' narrows from 'System.Object' to 'System.Data.SqlClient.SqlConnection'.
'Public Overloads Sub New(selectCommandText As String, selectConnectionString As String)': Argument matching parameter 'selectConnectionString' narrows from
'System.Object' to 'String'.
renholmMedlem sedan apr. 20012 048 inlägg
Skicka med lite kod plus en liten beskrivning vad du försöker göra, tycker det ser ut som om du bygger något som ska klara av olika databas kopplingar, detta finns det en artikel om på msdn har jag för mig, hittar den bara inte nu.
PaceMedlem sedan juni 20015 947 inlägg
Betraktar du inte ovanstående som lite kod? :e
Och ja, det är en class som ska hantera olika kopplingar till databaser.
Alla andra funktioner är bortskalade, men ger samma felmeddelanden:
Namespace blaha
Public Class PaceDatabase
Public objConn
Public DatabaseType As String
Public Function dbDataSet (ByVal strSQL As String)
Dim objAdapter As Object
Select Case Lcase(DatabaseType)
Case "sqlserver"
objAdapter = New SqlDataAdapter(strSQL, objConn)
Case "access", "mysql"
objAdapter = New OleDbDataAdapter(strSQL, objConn)
Case Else
objAdapter = New OdbcDataAdapter(strSQL, objConn)
End Select
Dim objDataSet As New DataSet()
objAdapter.Fill(objDataSet)
Return objDataSet
End Function
End Class
End Namespace
PaceMedlem sedan juni 20015 947 inlägg
Hittade artikeln på msdn du pratade om (tror jag): http://support.microsoft.com/default.aspx?scid=KB;en-us;308046&
Jag testade att skapa databaskopplingen (Dim mycon As New OleDbConnection(myConnString)) före varje DataAdapter och det är tydligen ett måste.
PaceMedlem sedan juni 20015 947 inlägg
Men nu vill jag inte skapa en ny databaskoppling varje gång jag ska hämta en DataAdapter, jag vill låta den befintliga vara öppen och stänga den när jag är klar. Hur gör jag (eller vad gör jag för fel)?
PatrikBMedlem sedan mars 20002 713 inlägg
kanske detta kan vara ngt ;)
<%@ Page Language="VB" Debug="True" %>
<%@ import Namespace="System" %>
<%@ import Namespace="System.Configuration" %>
<%@ import Namespace="System.Data" %>
<%@ import Namespace="System.Data.Oledb" %>
<%@ import Namespace="System.Data.SqlClient" %>
<%@ import Namespace="Microsoft.Data.Odbc" %>
<script runat="server">
Public Sub Page_Load(sender As Object, e As EventArgs)
Dim db As New DBWrapper()
db.SetType = "odbc"
db.ConnectionString = ConfigurationSettings.AppSettings("cwebConnString")
db.DBConnection()
db.DBCommand("SELECT * FROM Users")
Dim dr As OdbcDataReader = db.GetDataReader()
While dr.Read()
Label1.Text = Label1.Text & dr(0) & "<BR />"
End While
dr.Close()
db.CloseConnection()
End Sub
Public Class DBWrapper
Private m_conn As IDbConnection
Private m_command As IDbCommand
Public SetType As String
Public ConnectionString As String
Public Sub DBConnection()
Select Case SetType.ToUpper
Case "SQL"
m_conn = New SqlConnection(ConnectionString)
Case "OLEDB"
m_conn = New OleDbConnection(ConnectionString)
Case "ODBC"
m_conn = New OdbcConnection(ConnectionString)
End Select
End Sub
Public Sub DBCommand(ByVal sQuery As String)
If m_conn.State = ConnectionState.Closed Then m_conn.Open
Select Case SetType.ToUpper
Case "SQL"
m_command = New SqlCommand(sQuery, m_conn)
Case "OLEDB"
m_command = New OledbCommand(sQuery, m_conn)
Case "ODBC"
m_command = New OdbcCommand(sQuery, m_conn)
End Select
End Sub
Public Function GetDataReader() As IDataReader
Dim dr As IDataReader = m_command.ExecuteReader()
Return dr
dr.Close()
End Function
Public Sub CloseConnection()
If m_conn.State = ConnectionState.Open Then m_conn.Close()
End Sub
End Class
</script>
<html>
<head>
</head>
<body>
<form runat="server">
<asp:Label id="Label1" runat="server"></asp:Label>
<!-- Insert content here -->
</form>
</body>
</html>
ska förståss kodas in i ett namespace och kompileras till en dll .... men, bara för syns skull och för att snabbt kunna testa :e
cya,
PatrikB