Velocity Reviews - Computer Hardware Reviews

Velocity Reviews > Newsgroups > Programming > ASP .Net > Connect to Database

Reply
Thread Tools

Connect to Database

 
 
shapper
Guest
Posts: n/a
 
      06-21-2007
Hello,

I am using Microsoft Enterprise Library, on a class, to connect to a
database as follows:

Dim db As Database = DatabaseFactory.CreateDatabase("DatabaseName")

However, I would like the database name to be dynamic, i.e., specified
on the web site.

Can I define a connection string in my web site web.config and then
use it to create the database?

Or can I create my own Web.Config group to hold this information?

Thanks,
Miguel

 
Reply With Quote
 
 
 
 
Cowboy \(Gregory A. Beamer\)
Guest
Posts: n/a
 
      06-21-2007
You can do either. It is simply a string. You will have to set up the config
information, in the web.config, for that connection name. And, you can then
specify that particular connection, out of any number of connections, to
hit.

It would be something like this:

public Function GetDatabase(ByRef databaseName As String) as Database
Return DatabaseFactory.CreateDatabase(databaseName)
End Function

You can then pull from config like:

Dim dbName as String = ConfigurationManager.AppSettings("databaseName")

This would be like this in Web.Config

<add key="databaseName" value="MyFirstDatabase" />


--
Gregory A. Beamer
MVP; MCP: +I, SE, SD, DBA
http://gregorybeamer.spaces.live.com
Co-author: Microsoft Expression Web Bible (upcoming)

************************************************
Think outside the box!
************************************************
"shapper" <(E-Mail Removed)> wrote in message
news:(E-Mail Removed) oups.com...
> Hello,
>
> I am using Microsoft Enterprise Library, on a class, to connect to a
> database as follows:
>
> Dim db As Database = DatabaseFactory.CreateDatabase("DatabaseName")
>
> However, I would like the database name to be dynamic, i.e., specified
> on the web site.
>
> Can I define a connection string in my web site web.config and then
> use it to create the database?
>
> Or can I create my own Web.Config group to hold this information?
>
> Thanks,
> Miguel
>



 
Reply With Quote
 
 
 
 
David R. Longnecker
Guest
Posts: n/a
 
      06-21-2007
Miguel-

Unfortunately, the Factory doesn't have an overload that takes a connection
string. To directly pass a connection string, you have to bypass the factory
and directly use the database objects.

For example, if you're using Microsoft.Practices.EnterpriseLibrary.Data,
you'd take that a step farther to .Sql or .Oracle, etc.

From there you could use

SqlDatabase db = new SqlDatabase("connectionString");

or, to make it more dynamic, pull in the database name from a variable, a
querystring, wherever, as long as it matches the entry in the web.config.

string databaseName = ""; // Get database name from wherever
it is coming from.
SqlDatabase db =
new SqlDatabase(
System.Configuration.ConfigurationManager.Connecti onStrings[databaseName].ConnectionString);

Finally, the method I use is to create a ConnectionStrings class and simply
return each... creating a somewhat pseudo enum for VERY common connection
strings that I don't want to modify in 30+ web.configs if something changes;
I just want to update the framework library and push it back out to the GAC
in a server. If interested in that, check the blog entry below:

http://tiredblogger.wordpress.com/20...se-library-30/

HTH.

-dl

--
David R. Longnecker
http://blog.tiredstudent.com

s> Hello,
s>
s> I am using Microsoft Enterprise Library, on a class, to connect to a
s> database as follows:
s>
s> Dim db As Database = DatabaseFactory.CreateDatabase("DatabaseName")
s>
s> However, I would like the database name to be dynamic, i.e.,
s> specified on the web site.
s>
s> Can I define a connection string in my web site web.config and then
s> use it to create the database?
s>
s> Or can I create my own Web.Config group to hold this information?
s>
s> Thanks,
s> Miguel


 
Reply With Quote
 
sloan
Guest
Posts: n/a
 
      06-21-2007

I think this will work:



<add key="MyPreferredDatabase" value="StagingConnectionString" />



<connectionStrings>

<add name="DevelopmentConnectionString"
connectionString="server=MyDevelopmentServer;datab ase=Northwind;User
ID=northwinduser;password=northwindpassword"
providerName="System.Data.SqlClient"/>

<add name="ProductionConnectionString"
connectionString="server=MyProductionServer;databa se=Northwind;User
ID=northwinduser;password=northwindpassword"
providerName="System.Data.SqlClient"/>

<add name="StagingConnectionString"
connectionString="server=MyStagingServer;database= Northwind;User
ID=northwinduser;password=northwindpassword"
providerName="System.Data.SqlClient"/>



</connectionStrings>


-----------The Code

private Database GetADatabase ( )
{

string preferredDBName =
System.Configuration.ConfigurationManager["MyPreferredDatabase"];


Database db = DatabaseFactory.CreateDatabase(preferredDBName);

return db;


}




I think that is what Cowboy was getting at.

I don't think grabbing a concrete database (SqlDatabase) is a good solution.






"David R. Longnecker" <(E-Mail Removed)> wrote in message
news:(E-Mail Removed) om...
> Miguel-
>
> Unfortunately, the Factory doesn't have an overload that takes a

connection
> string. To directly pass a connection string, you have to bypass the

factory
> and directly use the database objects.
>
> For example, if you're using Microsoft.Practices.EnterpriseLibrary.Data,
> you'd take that a step farther to .Sql or .Oracle, etc.
>
> From there you could use
>
> SqlDatabase db = new SqlDatabase("connectionString");
>
> or, to make it more dynamic, pull in the database name from a variable, a
> querystring, wherever, as long as it matches the entry in the web.config.
>
> string databaseName = ""; // Get database name from wherever
> it is coming from.
> SqlDatabase db =
> new SqlDatabase(
>

System.Configuration.ConfigurationManager.Connecti onStrings[databaseName].Co
nnectionString);
>
> Finally, the method I use is to create a ConnectionStrings class and

simply
> return each... creating a somewhat pseudo enum for VERY common connection
> strings that I don't want to modify in 30+ web.configs if something

changes;
> I just want to update the framework library and push it back out to the

GAC
> in a server. If interested in that, check the blog entry below:
>
>

http://tiredblogger.wordpress.com/20...se-library-30/
>
> HTH.
>
> -dl
>
> --
> David R. Longnecker
> http://blog.tiredstudent.com
>
> s> Hello,
> s>
> s> I am using Microsoft Enterprise Library, on a class, to connect to a
> s> database as follows:
> s>
> s> Dim db As Database = DatabaseFactory.CreateDatabase("DatabaseName")
> s>
> s> However, I would like the database name to be dynamic, i.e.,
> s> specified on the web site.
> s>
> s> Can I define a connection string in my web site web.config and then
> s> use it to create the database?
> s>
> s> Or can I create my own Web.Config group to hold this information?
> s>
> s> Thanks,
> s> Miguel
>
>



 
Reply With Quote
 
David R. Longnecker
Guest
Posts: n/a
 
      06-25-2007
That's a good point, Sloan.

A question though: While I realize the that bypassing the factory of the
EntLibs may not be clean, have you come across a best practice for directly
passing in connection strings without using an app/web.config file? What
I ran into, and the reason I directly use the Database objects, is that our
connection strings are anything but stable and for our framework libraries,
it made more sense to create class pseudo-enumerators and pass them along
rather than change 30+ app/web.config files throughout our enterprise. Make
a change to a library, reroll that library to the 2 servers those apps read
from, and be done. The apps are spread throughout the enterprise, so placing
them in the machine.config (if even possible) didn't even seem as clean of
a solution.

The solution you provide still requires manually editing, re-encrypting,
and rerolling config files to the application sources.

Thanks for the explaination^^.

-dl

--
David R. Longnecker
http://blog.tiredstudent.com

s> I think this will work:
s>
s> <add key="MyPreferredDatabase" value="StagingConnectionString" />
s>
s> <connectionStrings>
s>
s> <add name="DevelopmentConnectionString"
s> connectionString="server=MyDevelopmentServer;datab ase=Northwind;User
s> ID=northwinduser;password=northwindpassword"
s> providerName="System.Data.SqlClient"/>
s>
s> <add name="ProductionConnectionString"
s> connectionString="server=MyProductionServer;databa se=Northwind;User
s> ID=northwinduser;password=northwindpassword"
s> providerName="System.Data.SqlClient"/>
s>
s> <add name="StagingConnectionString"
s> connectionString="server=MyStagingServer;database= Northwind;User
s> ID=northwinduser;password=northwindpassword"
s> providerName="System.Data.SqlClient"/>
s>
s> </connectionStrings>
s>
s> -----------The Code
s>
s> private Database GetADatabase ( )
s> {
s> string preferredDBName =
s> System.Configuration.ConfigurationManager["MyPreferredDatabase"];
s> Database db = DatabaseFactory.CreateDatabase(preferredDBName);
s>
s> return db;
s>
s> }
s>
s> I think that is what Cowboy was getting at.
s>
s> I don't think grabbing a concrete database (SqlDatabase) is a good
s> solution.
s>
s> "David R. Longnecker" <(E-Mail Removed)> wrote in message
s> news:(E-Mail Removed) om...
s>
>> Miguel-
>>
>> Unfortunately, the Factory doesn't have an overload that takes a
>>

s> connection
s>
>> string. To directly pass a connection string, you have to bypass the
>>

s> factory
s>
>> and directly use the database objects.
>>
>> For example, if you're using
>> Microsoft.Practices.EnterpriseLibrary.Data, you'd take that a step
>> farther to .Sql or .Oracle, etc.
>>
>> From there you could use
>>
>> SqlDatabase db = new SqlDatabase("connectionString");
>>
>> or, to make it more dynamic, pull in the database name from a
>> variable, a querystring, wherever, as long as it matches the entry in
>> the web.config.
>>
>> string databaseName = ""; // Get database name from wherever
>> it is coming from.
>> SqlDatabase db =
>> new SqlDatabase(

s> System.Configuration.ConfigurationManager.Connecti onStrings[databaseN
s> ame].Co nnectionString);
s>
>> Finally, the method I use is to create a ConnectionStrings class and
>>

s> simply
s>
>> return each... creating a somewhat pseudo enum for VERY common
>> connection strings that I don't want to modify in 30+ web.configs if
>> something
>>

s> changes;
s>
>> I just want to update the framework library and push it back out to
>> the
>>

s> GAC
s>
>> in a server. If interested in that, check the blog entry below:
>>

s> http://tiredblogger.wordpress.com/20...onnection-stri
s> ngs-for-enterprise-library-30/
s>
>> HTH.
>>
>> -dl
>>
>> --
>> David R. Longnecker
>> http://blog.tiredstudent.com
>> s> Hello,
>> s>
>> s> I am using Microsoft Enterprise Library, on a class, to connect to
>> a
>> s> database as follows:
>> s>
>> s> Dim db As Database =
>> DatabaseFactory.CreateDatabase("DatabaseName")
>> s>
>> s> However, I would like the database name to be dynamic, i.e.,
>> s> specified on the web site.
>> s>
>> s> Can I define a connection string in my web site web.config and
>> then
>> s> use it to create the database?
>> s>
>> s> Or can I create my own Web.Config group to hold this information?
>> s>
>> s> Thanks,
>> s> Miguel



 
Reply With Quote
 
sloan
Guest
Posts: n/a
 
      07-03-2007

My company (and I) actually wrote some wrapper code for the Enterprise
Library.

And we have a "configuration management" system, where we give back our
(adapter design pattern) Database object, which is just a wrapped enterprise
library database.

We have a static helper that gives back the above object.

That static helper reads and creates the db object from data stored in a
database somewhere.

I think we provide an ApplicationUUID. and maybe a Development , Staging ,
Production enum.

Does that make sense?

It was involved, but we have a central place to change db information.




"David R. Longnecker" <(E-Mail Removed)> wrote in message
news:(E-Mail Removed) om...
> That's a good point, Sloan.
>
> A question though: While I realize the that bypassing the factory of the
> EntLibs may not be clean, have you come across a best practice for

directly
> passing in connection strings without using an app/web.config file? What
> I ran into, and the reason I directly use the Database objects, is that

our
> connection strings are anything but stable and for our framework

libraries,
> it made more sense to create class pseudo-enumerators and pass them along
> rather than change 30+ app/web.config files throughout our enterprise.

Make
> a change to a library, reroll that library to the 2 servers those apps

read
> from, and be done. The apps are spread throughout the enterprise, so

placing
> them in the machine.config (if even possible) didn't even seem as clean of
> a solution.
>
> The solution you provide still requires manually editing, re-encrypting,
> and rerolling config files to the application sources.
>
> Thanks for the explaination^^.
>
> -dl
>
> --
> David R. Longnecker
> http://blog.tiredstudent.com
>
> s> I think this will work:
> s>
> s> <add key="MyPreferredDatabase" value="StagingConnectionString" />
> s>
> s> <connectionStrings>
> s>
> s> <add name="DevelopmentConnectionString"
> s> connectionString="server=MyDevelopmentServer;datab ase=Northwind;User
> s> ID=northwinduser;password=northwindpassword"
> s> providerName="System.Data.SqlClient"/>
> s>
> s> <add name="ProductionConnectionString"
> s> connectionString="server=MyProductionServer;databa se=Northwind;User
> s> ID=northwinduser;password=northwindpassword"
> s> providerName="System.Data.SqlClient"/>
> s>
> s> <add name="StagingConnectionString"
> s> connectionString="server=MyStagingServer;database= Northwind;User
> s> ID=northwinduser;password=northwindpassword"
> s> providerName="System.Data.SqlClient"/>
> s>
> s> </connectionStrings>
> s>
> s> -----------The Code
> s>
> s> private Database GetADatabase ( )
> s> {
> s> string preferredDBName =
> s> System.Configuration.ConfigurationManager["MyPreferredDatabase"];
> s> Database db = DatabaseFactory.CreateDatabase(preferredDBName);
> s>
> s> return db;
> s>
> s> }
> s>
> s> I think that is what Cowboy was getting at.
> s>
> s> I don't think grabbing a concrete database (SqlDatabase) is a good
> s> solution.
> s>
> s> "David R. Longnecker" <(E-Mail Removed)> wrote in message
> s> news:(E-Mail Removed) om...
> s>
> >> Miguel-
> >>
> >> Unfortunately, the Factory doesn't have an overload that takes a
> >>

> s> connection
> s>
> >> string. To directly pass a connection string, you have to bypass the
> >>

> s> factory
> s>
> >> and directly use the database objects.
> >>
> >> For example, if you're using
> >> Microsoft.Practices.EnterpriseLibrary.Data, you'd take that a step
> >> farther to .Sql or .Oracle, etc.
> >>
> >> From there you could use
> >>
> >> SqlDatabase db = new SqlDatabase("connectionString");
> >>
> >> or, to make it more dynamic, pull in the database name from a
> >> variable, a querystring, wherever, as long as it matches the entry in
> >> the web.config.
> >>
> >> string databaseName = ""; // Get database name from wherever
> >> it is coming from.
> >> SqlDatabase db =
> >> new SqlDatabase(

> s> System.Configuration.ConfigurationManager.Connecti onStrings[databaseN
> s> ame].Co nnectionString);
> s>
> >> Finally, the method I use is to create a ConnectionStrings class and
> >>

> s> simply
> s>
> >> return each... creating a somewhat pseudo enum for VERY common
> >> connection strings that I don't want to modify in 30+ web.configs if
> >> something
> >>

> s> changes;
> s>
> >> I just want to update the framework library and push it back out to
> >> the
> >>

> s> GAC
> s>
> >> in a server. If interested in that, check the blog entry below:
> >>

> s> http://tiredblogger.wordpress.com/20...onnection-stri
> s> ngs-for-enterprise-library-30/
> s>
> >> HTH.
> >>
> >> -dl
> >>
> >> --
> >> David R. Longnecker
> >> http://blog.tiredstudent.com
> >> s> Hello,
> >> s>
> >> s> I am using Microsoft Enterprise Library, on a class, to connect to
> >> a
> >> s> database as follows:
> >> s>
> >> s> Dim db As Database =
> >> DatabaseFactory.CreateDatabase("DatabaseName")
> >> s>
> >> s> However, I would like the database name to be dynamic, i.e.,
> >> s> specified on the web site.
> >> s>
> >> s> Can I define a connection string in my web site web.config and
> >> then
> >> s> use it to create the database?
> >> s>
> >> s> Or can I create my own Web.Config group to hold this information?
> >> s>
> >> s> Thanks,
> >> s> Miguel

>
>



 
Reply With Quote
 
David R. Longnecker
Guest
Posts: n/a
 
      07-03-2007
Interesting idea indeed... thanks for the background!

-dl

--
David R. Longnecker
http://blog.tiredstudent.com

> My company (and I) actually wrote some wrapper code for the Enterprise
> Library.
>
> And we have a "configuration management" system, where we give back
> our (adapter design pattern) Database object, which is just a wrapped
> enterprise library database.
>
> We have a static helper that gives back the above object.
>
> That static helper reads and creates the db object from data stored in
> a database somewhere.
>
> I think we provide an ApplicationUUID. and maybe a Development ,
> Staging , Production enum.
>
> Does that make sense?
>
> It was involved, but we have a central place to change db information.
>
> "David R. Longnecker" <(E-Mail Removed)> wrote in message
> news:(E-Mail Removed) om...
>
>> That's a good point, Sloan.
>>
>> A question though: While I realize the that bypassing the factory of
>> the EntLibs may not be clean, have you come across a best practice
>> for
>>

> directly
>
>> passing in connection strings without using an app/web.config file?
>> What I ran into, and the reason I directly use the Database objects,
>> is that
>>

> our
>
>> connection strings are anything but stable and for our framework
>>

> libraries,
>
>> it made more sense to create class pseudo-enumerators and pass them
>> along rather than change 30+ app/web.config files throughout our
>> enterprise.
>>

> Make
>
>> a change to a library, reroll that library to the 2 servers those
>> apps
>>

> read
>
>> from, and be done. The apps are spread throughout the enterprise, so
>>

> placing
>
>> them in the machine.config (if even possible) didn't even seem as
>> clean of a solution.
>>
>> The solution you provide still requires manually editing,
>> re-encrypting, and rerolling config files to the application sources.
>>
>> Thanks for the explaination^^.
>>
>> -dl
>>
>> --
>> David R. Longnecker
>> http://blog.tiredstudent.com
>> s> I think this will work:
>> s>
>> s> <add key="MyPreferredDatabase" value="StagingConnectionString" />
>> s>
>> s> <connectionStrings>
>> s>
>> s> <add name="DevelopmentConnectionString"
>> s>
>> connectionString="server=MyDevelopmentServer;datab ase=Northwind;User
>> s> ID=northwinduser;password=northwindpassword"
>> s> providerName="System.Data.SqlClient"/>
>> s>
>> s> <add name="ProductionConnectionString"
>> s>
>> connectionString="server=MyProductionServer;databa se=Northwind;User
>> s> ID=northwinduser;password=northwindpassword"
>> s> providerName="System.Data.SqlClient"/>
>> s>
>> s> <add name="StagingConnectionString"
>> s> connectionString="server=MyStagingServer;database= Northwind;User
>> s> ID=northwinduser;password=northwindpassword"
>> s> providerName="System.Data.SqlClient"/>
>> s>
>> s> </connectionStrings>
>> s>
>> s> -----------The Code
>> s>
>> s> private Database GetADatabase ( )
>> s> {
>> s> string preferredDBName =
>> s> System.Configuration.ConfigurationManager["MyPreferredDatabase"];
>> s> Database db = DatabaseFactory.CreateDatabase(preferredDBName);
>> s>
>> s> return db;
>> s>
>> s> }
>> s>
>> s> I think that is what Cowboy was getting at.
>> s>
>> s> I don't think grabbing a concrete database (SqlDatabase) is a good
>> s> solution.
>> s>
>> s> "David R. Longnecker" <(E-Mail Removed)> wrote in
>> message
>> s> news:(E-Mail Removed) om...
>> s>
>>>> Miguel-
>>>>
>>>> Unfortunately, the Factory doesn't have an overload that takes a
>>>>

>> s> connection
>> s>
>>>> string. To directly pass a connection string, you have to bypass
>>>> the
>>>>

>> s> factory
>> s>
>>>> and directly use the database objects.
>>>>
>>>> For example, if you're using
>>>> Microsoft.Practices.EnterpriseLibrary.Data, you'd take that a step
>>>> farther to .Sql or .Oracle, etc.
>>>>
>>>> From there you could use
>>>>
>>>> SqlDatabase db = new SqlDatabase("connectionString");
>>>>
>>>> or, to make it more dynamic, pull in the database name from a
>>>> variable, a querystring, wherever, as long as it matches the entry
>>>> in the web.config.
>>>>
>>>> string databaseName = ""; // Get database name from wherever
>>>> it is coming from.
>>>> SqlDatabase db =
>>>> new SqlDatabase(

>> s>
>> System.Configuration.ConfigurationManager.Connecti onStrings[databaseN
>> s> ame].Co nnectionString);
>> s>
>>>> Finally, the method I use is to create a ConnectionStrings class
>>>> and
>>>>

>> s> simply
>> s>
>>>> return each... creating a somewhat pseudo enum for VERY common
>>>> connection strings that I don't want to modify in 30+ web.configs
>>>> if something
>>>>

>> s> changes;
>> s>
>>>> I just want to update the framework library and push it back out to
>>>> the
>>>>

>> s> GAC
>> s>
>>>> in a server. If interested in that, check the blog entry below:
>>>>

>> s>
>> http://tiredblogger.wordpress.com/20...onnection-stri
>> s> ngs-for-enterprise-library-30/
>> s>
>>>> HTH.
>>>>
>>>> -dl
>>>>
>>>> --
>>>> David R. Longnecker
>>>> http://blog.tiredstudent.com
>>>> s> Hello,
>>>> s>
>>>> s> I am using Microsoft Enterprise Library, on a class, to connect
>>>> to
>>>> a
>>>> s> database as follows:
>>>> s>
>>>> s> Dim db As Database =
>>>> DatabaseFactory.CreateDatabase("DatabaseName")
>>>> s>
>>>> s> However, I would like the database name to be dynamic, i.e.,
>>>> s> specified on the web site.
>>>> s>
>>>> s> Can I define a connection string in my web site web.config and
>>>> then
>>>> s> use it to create the database?
>>>> s>
>>>> s> Or can I create my own Web.Config group to hold this
>>>> information?
>>>> s>
>>>> s> Thanks,
>>>> s> Miguel



 
Reply With Quote
 
 
 
Reply

Thread Tools

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
Database Database Database Database scott93727@gmail.com Computer Information 0 09-27-2012 02:43 AM
DataBase DataBase DataBase DataBase scott93727@gmail.com Computer Information 0 09-26-2012 09:40 AM
connect a database in remote server (can connect to the server via SSH) zhangxiaoyu912@gmail.com Perl Misc 2 07-18-2007 07:20 PM
Could Not Connect To SMTP Host Connection Failed -- Software caused connection abort: connect kishore@novelteam.com Java 3 11-16-2005 03:33 PM
Can't connect to local machine with anything except IE Other browsers can't connect without password Otis Mukinfus ASP .Net 3 07-08-2005 03:54 AM



Advertisments