Avatar billede aero Nybegynder
06. november 2010 - 21:20 Der er 27 kommentarer og
1 løsning

Connectionstring fra CS fil til web.config

Laver ikke dette til dagligt...im learning..
Men hvordan er det nu at jeg kan tage denne kode

string connString = @"Server=.\SQLEXPRESS;Database=MyDB;Trusted_Connection=yes;";
productsRepository = new SqlProductsRepository (connString);

og smide den ind i

<connectionStrings>
      <add name="AppDb" connectionString=".................."/>
</connectionStrings>
Avatar billede bkp Nybegynder
06. november 2010 - 22:09 #1
Jeg er ikke helt med på hvad det er du vil spørge om.

Hvis jeg forstår dig rigtigt spørger du hvordan du får connectionstrengen ind i din config fil?

Egentlig skriver du den bare, men fortæl lige lidt mere så vi er sikre på hvad det er du søger svar på.
Avatar billede arne_v Ekspert
06. november 2010 - 22:46 #2
eksempel:

    <connectionStrings>
        <add name="Test"
            connectionString="Data Source=ARNEPC3\SQLEXPRESS;Initial Catalog=Test;Integrated Security=True"
            providerName="System.Data.SqlClient" />
    </connectionStrings>


ConfigurationManager.ConnectionStrings["Test"].ConnectionString
Avatar billede aero Nybegynder
06. november 2010 - 23:27 #3
Tak Arne

Og har jeg ret i at det du viser mig der, det er til lokalt testning altså på min PC og når jeg så skal køre det på et domæne så er det

<add name="AppDb" connectionString="Data Source=|DataDirectory|\SQLEXPRESS;Persist Security Info=True"/>

eller !?

Ang. ConfigurationManager så bruger jeg dette

public override void Load()
            {
                Bind<IProductsRepository>()
                .To<SqlProductsRepository>()
                .WithConstructorArgument("connectionString", ConfigurationManager.ConnectionStrings["AppDb"].ConnectionString);
            }

men det giver mig denne fejl.
Der er ikke defineret en konstruktør uden parametre for dette objekt.
Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.

Exception Details: System.MissingMethodException: Der er ikke defineret en konstruktør uden parametre for dette objekt.

Source Error:

An unhandled exception was generated during the execution of the current web request. Information regarding the origin and location of the exception can be identified using the exception stack trace below. 

Stack Trace:


[MissingMethodException: Der er ikke defineret en konstruktør uden parametre for dette objekt.]
  System.RuntimeTypeHandle.CreateInstance(RuntimeType type, Boolean publicOnly, Boolean noCheck, Boolean& canBeCached, RuntimeMethodHandleInternal& ctor, Boolean& bNeedSecurityCheck) +0
  System.RuntimeType.CreateInstanceSlow(Boolean publicOnly, Boolean skipCheckThis, Boolean fillCache) +98
  System.RuntimeType.CreateInstanceDefaultCtor(Boolean publicOnly, Boolean skipVisibilityChecks, Boolean skipCheckThis, Boolean fillCache) +241
  System.Activator.CreateInstance(Type type, Boolean nonPublic) +69
  System.Activator.CreateInstance(Type type) +6
  System.Web.Mvc.DefaultControllerFactory.GetControllerInstance(RequestContext requestContext, Type controllerType) +491

[InvalidOperationException: An error occurred when trying to create a controller of type 'Store.WebUI.Controllers.ProductsController'. Make sure that the controller has a parameterless public constructor.]
  System.Web.Mvc.DefaultControllerFactory.GetControllerInstance(RequestContext requestContext, Type controllerType) +628
  System.Web.Mvc.DefaultControllerFactory.CreateController(RequestContext requestContext, String controllerName) +204
  System.Web.Mvc.MvcHandler.ProcessRequestInit(HttpContextBase httpContext, IController& controller, IControllerFactory& factory) +193
  System.Web.Mvc.MvcHandler.BeginProcessRequest(HttpContextBase httpContext, AsyncCallback callback, Object state) +160
  System.Web.Mvc.MvcHandler.BeginProcessRequest(HttpContext httpContext, AsyncCallback callback, Object state) +80
  System.Web.Mvc.MvcHandler.System.Web.IHttpAsyncHandler.BeginProcessRequest(HttpContext context, AsyncCallback cb, Object extraData) +45
  System.Web.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +8841400
  System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +184




Min 'Store.WebUI.Controllers.ProductsController' ser sådan her ud.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using Store.Domain.Abstract;
using Store.Domain.Concrete;

namespace Store.WebUI.Controllers
{
    public class ProductsController : Controller
    {
        private IProductsRepository productsRepository;
        public ProductsController (IProductsRepository productsRepository)
        {
            this.productsRepository = productsRepository;
        }
            public ViewResult List()
        {
            return View(productsRepository.Products.ToList());
        }
    }
}
Avatar billede arne_v Ekspert
06. november 2010 - 23:51 #4
<add name="AppDb" connectionString="Data Source=|DataDirectory|\SQLEXPRESS;Persist Security Info=True"/>

ser forkert ud.

Skal du attache en uploaded SQLServer Express MDF eller skal du connecte til en eksisterende SQLServer?
Avatar billede aero Nybegynder
07. november 2010 - 00:00 #5
tænker du på hjemme PC eller udbyder !?

Fejlen får jeg når jeg køre test på min PC nu, altså Lokalt miljø, ang. den anden "<add name="AppDb" connectionString="Data Source=|DataDirectory|\SQLEXPRESS;Persist Security Info=True"/>" var bare for at vide det når jeg flytter det hele over på en server, når det køre som det skal.
Avatar billede arne_v Ekspert
07. november 2010 - 00:08 #6
En ting af gangen.

hvilken slags SQLServer og database + connection string + fejl besked

for en af gangen.
Avatar billede aero Nybegynder
07. november 2010 - 00:29 #7
Ok, skal køre det lokalt og har ingen error i min error list.

Web.config
<connectionStrings>
    <add name="AppDb" connectionString="Data Source=nitro-pc\SQLEXPRESS;Initial Catalog=Test;Integrated Security=True" providerName="System.Data.SqlClient" />
  </connectionStrings>

Databasen er en SQLserver .dbo fil
nitro-pc\sqlexpress.Store.dbo

Det der henter dataen er fra denne fil NinjectControllerFactory.cs
public class NinjectControllerFactory : DefaultControllerFactory
    {
        private IKernel kernel = new StandardKernel(new StoreServices());
        protected override IController GetControllerInstance(RequestContext context,
        Type controllerType)
        {
            if (controllerType == null)
                return null;
            return (IController)kernel.Get(controllerType);
        }
        // Configures how abstract service types are mapped to concrete implementations
        private class StoreServices : NinjectModule
        {
            public override void Load()
            {
                Bind<IProductsRepository>().To<SqlProductsRepository>().WithConstructorArgument("connectionString", ConfigurationManager.ConnectionStrings["AppDb"].ConnectionString);
            }
        }
    }

Fejlen kommer ang. min Bind linje fra denne fil NinjectControllerFactory.cs der siger den et eller andet med "new" og mærkerer linjen.

Fejlen er:
System.NullReferenceException was unhandled by user code
  Message=Objektreferencen er ikke indstillet til en forekomst af et objekt.
  Source=Store.WebUI
  StackTrace:
      ved Store.WebUI.Infrastructure.NinjectControllerFactory.StoreServices.Load() i C:\Users\Nitro\Documents\Visual Studio 2010\Projects\Store\Store.WebUI\Infrastructure\NinjectControllerFactory.cs:linje 32
      ved Ninject.Modules.NinjectModule.OnLoad(IKernel kernel)
      ved Ninject.KernelBase.Load(IEnumerable`1 modules)
      ved Ninject.KernelBase..ctor(IComponentContainer components, INinjectSettings settings, INinjectModule[] modules)
      ved Ninject.KernelBase..ctor(INinjectModule[] modules)
      ved Ninject.StandardKernel..ctor(INinjectModule[] modules)
      ved Store.WebUI.Infrastructure.NinjectControllerFactory..ctor() i C:\Users\Nitro\Documents\Visual Studio 2010\Projects\Store\Store.WebUI\Infrastructure\NinjectControllerFactory.cs:linje 18
      ved Store.WebUI.MvcApplication.Application_Start() i C:\Users\Nitro\Documents\Visual Studio 2010\Projects\Store\Store.WebUI\Global.asax.cs:linje 35
  InnerException:



LINJE KODER
NinjectControllerFactory.cs:linje 32
Bind<IProductsRepository>().To<SqlProductsRepository>().WithConstructorArgument("connectionString", ConfigurationManager.ConnectionStrings["AppDb"].ConnectionString);

Global.asax.cs:linje 35
ControllerBuilder.Current.SetControllerFactory(new NinjectControllerFactory());
Avatar billede aero Nybegynder
07. november 2010 - 00:30 #8
NinjectControllerFactory.cs:linje 18
private IKernel kernel = new StandardKernel(new StoreServices());
Avatar billede arne_v Ekspert
07. november 2010 - 00:34 #9

Databasen er en SQLserver .dbo fil
nitro-pc\sqlexpress.Store.dbo


Der foregår noget mystisk her.

SQLServer bruger ikke .dbo filer.

Hvis du har en SQLServer Express så vil den typisk have :
- et server navn som DINPC\SQLEXPRESS
- data for en eller flere databaser ligge i en .MDF file
- log for en eller flere databaser ligge i en .LDF file
Avatar billede arne_v Ekspert
07. november 2010 - 00:35 #10
Og man connecter til SQLServer enten over named pipes eller TCP port 1433 - ikke som fil.

(bortset fra muligheden for at auto attache MDF filer)
Avatar billede aero Nybegynder
07. november 2010 - 01:03 #11
Ang. fejl 2 den kommer de første gange jeg køre projektet efter de gange så hvis jeg køre det igen (uden at have ændret i koden) så kommer fejl 1.

Fatter det ikke, har kigget mig MVC projekt igennem nu 10 gange og kan ikke finde nogle database i den og det findes ikke engang en App_Data mappe.

Når jeg kigger i server explore delen i Visual Studio så kan jeg se databasen som SQLEXPRESS.Store.dbo kan ikke se nogle sti på den.

Og det har virket, men i den bog jeg går efter "Apress Pro ASP NET MVC 2 Framework 2nd Edition" så blev der nævnt "Ninject's web site offers additional "extensions"" så satte jeg projektet op efter det og alle assem. er fundet og køre.

jeg fatter det ikke, når men Arne jeg vender tilbage i morgen formiddag.
Avatar billede aero Nybegynder
07. november 2010 - 11:55 #12
Hej Arne

Jeg har addet denne mappe istedet og har lavet en ny database

App_Data

og i den er denne database
SQLEXPRESS.Store.mdf


hvordan skal min <connectionStrings> se ud til denne database !?
Avatar billede arne_v Ekspert
07. november 2010 - 14:09 #13
Prøv:

Server=NITRO-PC\SQLExpress;AttachDbFilename=|DataDirectory|SQLEXPRESS.Store.mdf; Database=MyDB;Trusted_Connection=Yes;
Avatar billede aero Nybegynder
07. november 2010 - 14:30 #14
tænkte jeg nok, når jeg køre projektet nu så kommer denne fejl

An attempt to attach an auto-named database for file C:\Users\Nitro\Documents\Visual Studio 2010\Projects\StoreTest\Store.WebUI\App_Data\SQLEXPRESS.Store.mdf failed. A database with the same name exists, or specified file cannot be opened, or it is located on UNC share.

det er ang. denne linje i min ProductsController.cs
{
            return View(productsRepository.Products.ToList());
        }

hvad kan problemet være !?
Avatar billede arne_v Ekspert
07. november 2010 - 14:43 #15
Måske er databasen allerede attached af SQLServer.

Prøv uden AttachDbFilename!
Avatar billede aero Nybegynder
07. november 2010 - 15:33 #16
Hvis jeg laver den om til
  <connectionStrings>
    <add name="AppDb" connectionString="Data Source=.\SQLEXPRESS;Integrated Security=True" providerName="System.Data.SqlClient" />
  </connectionStrings>

Så smider den en nu fejl ang. min tabel der hedder Products

jeg denne fejl nu.
System.Data.SqlClient.SqlException was unhandled by user code
  Message=Invalid object name 'Products'.
  Source=.Net SqlClient Data Provider
  ErrorCode=-2146232060
  Class=16
  LineNumber=1
  Number=208
  Procedure=""
  Server=.\SQLEXPRESS
  State=1
  StackTrace:
      ved System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection)
      ved System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection)
      ved System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning()
      ved System.Data.SqlClient.TdsParser.Run(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj)
      ved System.Data.SqlClient.SqlDataReader.ConsumeMetaData()
      ved System.Data.SqlClient.SqlDataReader.get_MetaData()
      ved System.Data.SqlClient.SqlCommand.FinishExecuteReader(SqlDataReader ds, RunBehavior runBehavior, String resetOptionsString)
      ved System.Data.SqlClient.SqlCommand.RunExecuteReaderTds(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, Boolean async)
      ved System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method, DbAsyncResult result)
      ved System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method)
      ved System.Data.SqlClient.SqlCommand.ExecuteReader(CommandBehavior behavior, String method)
      ved System.Data.SqlClient.SqlCommand.ExecuteDbDataReader(CommandBehavior behavior)
      ved System.Data.Common.DbCommand.ExecuteReader()
      ved System.Data.Linq.SqlClient.SqlProvider.Execute(Expression query, QueryInfo queryInfo, IObjectReaderFactory factory, Object[] parentArgs, Object[] userArgs, ICompiledSubQuery[] subQueries, Object lastResult)
      ved System.Data.Linq.SqlClient.SqlProvider.ExecuteAll(Expression query, QueryInfo[] queryInfos, IObjectReaderFactory factory, Object[] userArguments, ICompiledSubQuery[] subQueries)
      ved System.Data.Linq.SqlClient.SqlProvider.System.Data.Linq.Provider.IProvider.Execute(Expression query)
      ved System.Data.Linq.Table`1.GetEnumerator()
      ved System.Data.Linq.Table`1.System.Collections.Generic.IEnumerable<TEntity>.GetEnumerator()
      ved System.Collections.Generic.List`1..ctor(IEnumerable`1 collection)
      ved System.Linq.Enumerable.ToList[TSource](IEnumerable`1 source)
      ved Store.WebUI.Controllers.ProductsController.List() i C:\Users\Nitro\Documents\Visual Studio 2010\Projects\StoreTest\Store.WebUI\Controllers\ProductsController.cs:linje 20
      ved lambda_method(Closure , ControllerBase , Object[] )
      ved System.Web.Mvc.ActionMethodDispatcher.Execute(ControllerBase controller, Object[] parameters)
      ved System.Web.Mvc.ReflectedActionDescriptor.Execute(ControllerContext controllerContext, IDictionary`2 parameters)
      ved System.Web.Mvc.ControllerActionInvoker.InvokeActionMethod(ControllerContext controllerContext, ActionDescriptor actionDescriptor, IDictionary`2 parameters)
      ved System.Web.Mvc.ControllerActionInvoker.<>c__DisplayClassd.<InvokeActionMethodWithFilters>b__a()
      ved System.Web.Mvc.ControllerActionInvoker.InvokeActionMethodFilter(IActionFilter filter, ActionExecutingContext preContext, Func`1 continuation)
  InnerException:
Avatar billede arne_v Ekspert
07. november 2010 - 15:50 #17
Du mangler at angive database navn!
Avatar billede arne_v Ekspert
07. november 2010 - 15:50 #18
Den kigger sikkert efter din Products tabel i master databasen så.
Avatar billede aero Nybegynder
07. november 2010 - 18:53 #19
jeg giver op og går lige 5 skridt tilbage, til lige før det sted jeg skulle add Ninject, for det var der det gik galt ang. database connecting.

Men smid et svar for din tid Arne.
Avatar billede arne_v Ekspert
07. november 2010 - 19:02 #20
svar
Avatar billede arne_v Ekspert
07. november 2010 - 19:03 #21
Måske skulle du troubleshoote database adgangen via simpel SqlConnection/SqlCommand/SqlDataReader, således at det er klart hvor fejlen ligger.
Avatar billede aero Nybegynder
07. november 2010 - 19:27 #22
hvordan ser det eks. evt. ud, kan godt huske jeg har hørt og brugt det før men det er år tilbage og er først lige begyndt at lege lidt med det igen.
Avatar billede arne_v Ekspert
07. november 2010 - 19:32 #23
Eksempel:

        SqlConnection con = new SqlConnection("server=ARNEPC3\SQLEXPRESS;Integrated Security=Yes;database=Test");
        con.Open();
        SqlCommand cmd = new SqlCommand("SELECT f1,f2 FROM T1", con);
        SqlDataReader rdr = cmd.ExecuteReader();
        while(rdr.Read())
        {
            Console.WriteLine(rdr[0] + " " + rdr[1]);
        }
        rdr.Close();
        con.Close();
Avatar billede arne_v Ekspert
07. november 2010 - 19:32 #24
Altså:
1) få en SQLConnection til at virke
2) få frameworket ovenpå til at virke
Avatar billede aero Nybegynder
08. november 2010 - 22:03 #25
pinligt......Arne jeg fandt problemet, det har stået der siden første tråd.........men database var i Store.Domain altså App_Data mappen, fejlen omtaler jo Store.WebUI, efter jeg så det flyttede jeg mappen App_Data til det nye sted og hvad tror du der skete....ja for fan*** det virkede.

Men hvorfor skal App_Data ind i WebUI og ikke i Domain i MVC !??
Avatar billede arne_v Ekspert
09. november 2010 - 03:59 #26
Snakker du nu om inde i Visual Studio eller om deployment på IIS?
Avatar billede aero Nybegynder
09. november 2010 - 09:41 #27
Jeg køre det som debug gennem Visual Studio og det var derfra jeg vil fejlene.
Avatar billede arne_v Ekspert
10. november 2010 - 02:32 #28
Hvis du er for VS centric kan det godt blive forvirrende.

VS viser filerne på en bestemt måde og deployer dem på en bestemt måde.
Avatar billede Ny bruger Nybegynder

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.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester