05. februar 2006 - 12:01Der er
57 kommentarer og 1 løsning
Forbindelse til en SQL Server 2005 database
Til en 'rigtig' SQL Server database kan man bruge denne forbindelsesstreng:
Dim ConnProd As New SqlConnection("SERVER=mssql.buydomains.dk; UID=xx; PWD=yy; DATABASE=test;")
Kan man bruge en lignende streng til til at forbinde sig med en SQL Server Express 2005 database, altså til fx. tblTest.mdf beliggende i biblioteket App_Data? Hvad vil den konkret skulle være? (Jeg ved godt, at man via kontroller kan forbinde tabellen til fx. et GridView via brugerfladen, men den funktion ønsker jeg i dette tilfælde ikke at bruge).
<remove name="LocalSqlServer"/>du kan bruge <add name="LocalSqlServer" connectionString="Data Source=.\SQLExpress;Integrated Security=True;User Instance=True;AttachDBFilename=|DataDirectory|personal.mdf" providerName="System.Data.SqlClient"/> i web.config
Det er jeg ikke helt med på - kan jeg få dig til at skrære det lidt mere konkret ud? Angiver du 2 muligheder: som forbindelsesstreng og at der skal noget i web.config eller er det een løsning?
jo det er mig som lavede en fejl. Dim ConnProd As New SqlConnection(ConfigurationManager.ConnectionStrings("Navnpåconnectionstringiwebconfig").ConnectionString)
Nu har jeg forsøgt mig med dette (+det i web.config):
Sub Page_Load(ByVal sender As Object, ByVal e As EventArgs) Dim ConnProd As New Data.SqlClient.SqlConnection(ConfigurationManager.ConnectionStrings("ConnectionString").ConnectionString) Dim strSQL As String ConnProd.Open() strSQL = "SELECT F1, F2 FROM Table1"
Dim SQLTekstProd As New Data.SqlClient.SqlCommand(strSQL, ConnProd) Dim ds As Data.SqlClient.SqlDataReader ds = SQLTekstProd.ExecuteReader()
GridView1.DataSource = ds GridView1.DataBind()
ConnProd.Close() End Sub
Jeg får ingen fejl, men kan ikke se Gridview - skærm bliver kun hvid?
Åh - det er da mig, der ikke tænker mig om! Jeg har jo lige fået at vide i et andet spørgsmål, at AutoEventWireup skal sættes til true, så koden blev overhovedt ikke gennemløbet!!
Men nu hvor det sker, får jeg denne besked:
The entry 'LocalSqlServer' has already been added. (C:\2. Kims data - applikationsudvikling\WebApp\Test - generelt\ASP.NET\SQL Server Express 2005\web.config line 13)
for linien
ConnProd As New Data.SqlClient.SqlConnection(ConfigurationManager.ConnectionStrings("ConnectionString").ConnectionString)?
An error has occurred while establishing a connection to the server. When connecting to SQL Server 2005, this failure may be caused by the fact that under the default settings SQL Server does not allow remote connections.
<?xml version="1.0"?> <!-- Note: As an alternative to hand editing this file you can use the web admin tool to configure settings for your application. Use the Website->Asp.Net Configuration option in Visual Studio. A full list of settings and comments can be found in machine.config.comments usually located in \Windows\Microsoft.Net\Framework\v2.x\Config --> <configuration> <appSettings/> <connectionStrings> <remove name="LocalSqlServer"/> <add name="LocalSqlServer" connectionString="Data Source=.\SQLExpress;Integrated Security=True;User Instance=True;AttachDBFilename=|DataDirectory|Test 2005.mdf" providerName="System.Data.SqlClient"/> </connectionStrings> <system.web> <!-- Set compilation debug="true" to insert debugging symbols into the compiled page. Because this affects performance, set this value to true only during development.
Visual Basic options: Set strict="true" to disallow all data type conversions where data loss can occur. Set explicit="true" to force declaration of all variables. --> <compilation debug="true" strict="false" explicit="true"/> <pages> <namespaces> <clear/> <add namespace="System"/> <add namespace="System.Collections"/> <add namespace="System.Collections.Specialized"/> <add namespace="System.Configuration"/> <add namespace="System.Text"/> <add namespace="System.Text.RegularExpressions"/> <add namespace="System.Web"/> <add namespace="System.Web.Caching"/> <add namespace="System.Web.SessionState"/> <add namespace="System.Web.Security"/> <add namespace="System.Web.Profile"/> <add namespace="System.Web.UI"/> <add namespace="System.Web.UI.WebControls"/> <add namespace="System.Web.UI.WebControls.WebParts"/> <add namespace="System.Web.UI.HtmlControls"/> </namespaces> </pages> <!-- The <authentication> section enables configuration of the security authentication mode used by ASP.NET to identify an incoming user. --> <authentication mode="Windows"/> <!-- The <customErrors> section enables configuration of what to do if/when an unhandled error occurs during the execution of a request. Specifically, it enables developers to configure html error pages to be displayed in place of a error stack trace.
Et lille tillægsspørgsmål: hvis jeg tilføjer en tabel i Test2005.mdf (altså i venstre side under DataConnections under Tables) og ligger den under 'Table1' som virker og herefter lader min SQL pege på den nye tabel 'tblTest', så får jeg beskeden 'Invalid object name tblTest', når jeg kører koden. Burde den ikke kende en ny tabel i Test2005.mdf? Min Test2005.mdf står under App_Data i højre side (jeg er skiftet til Visual Studio 2005 i mellemtiden).
Jeg fik vist rodet selve databaseFORBINDELSEN tilvenstre sammen ned selve databasen tilhøjre. Når jeg dobbeltklikkede tilvenstre, så åbnede den en Test2005.mdf1 og her var tblTest ikke i. Jeg slettede alle forbindelser og klikkede på Test2005.mdf tilhøjre, oprettede tblTest via forbindelsen og nu kan den findes.
Jeg har med fint resultet brugt <add name.... syntaksen til SQL Server, men hvis man skal koble sig på en Access database på samme måde, hvad er da syntaksen?
Den vil ikke kendes ved ConfigurationManager - skriver den ikke er declared (har lavet en reference til projektet med class'en). Hvis jeg kører den alligevel, giver den meldingen: Unrecognized configuration section 'connectionStrings'?
Ja - den sætter bølgestreger under ConfigurationManager i class'en og så kan den vel meget naturligt heller ikke hente noget frem under connectionStrings. Iøvrigt sætter den også bølgestreg under Request i Request.ServerVariables(HTTP_HOST) = "www.... - kan det have noget med det at gøre?
Ok - så instruktionen kan simpelthen være ukendt for den version?
Jeg kunne i og for sig i dette tilfælde også skrive sådan direkte:
If LCase(Request.ServerVariables("HTTP_HOST")) = "www.x.com" Then Dim objConn As New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;DATA SOURCE=" & server.mappath("../qccdatabases/AppHits.mdb") & ";") Else Dim objConn As New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;DATA SOURCE=" & Server.MapPath("/DB/Database.mdb")) End If
men så er der det probem med at noget Dim'et i en If bliver betragtet som privat og ukendt udenfor If'en - ved du, om der er en måde at gøre de Dim'er kendt udenfor If'en?
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.