---
title: "hur få in parameters i dal"
type: "forum-thread"
url: "https://www.webforum.nu/amne/dotnet/167285-hur-få-in-parameters-i-dal"
topic: ".NET"
topic_url: "https://www.webforum.nu/amne/dotnet"
author: "doggelito"
published: "2007-12-15T11:58:54.000Z"
updated: "2007-12-18T09:18:39.000Z"
replies: 6
views: 689
page: 1
pages: 1
language: "sv-SE"
site: "webForum — webforum.nu"
rights: "Upphovsrätten till varje inlägg tillhör dess författare."
attribution: "Citera som: webForum, https://www.webforum.nu/amne/dotnet/167285-hur-få-in-parameters-i-dal"
---

# hur få in parameters i dal

## #1 — doggelito, 2007-12-15T11:58Z

det känns som om jag snöat in mig! så det är bäst att fråga expertisen! :)

jag vill få in ett antal sqlparametrar i mitt dal och har nu så här:

```
        private ArrayList _parameters = null;

        public DataTable GetTable(string selectCommand)
        {
            SqlConnection connection = new SqlConnection(_ConnectionString);
            SqlCommand command = new SqlCommand(selectCommand, connection);
            command.CommandType = CommandType.StoredProcedure;

            SqlDataAdapter dataAdapter = null;
            DataTable dataTable = null;

            if(_parameters != null)
                foreach (SqlParameter p in _parameters)
                    command.Parameters.Add(p);

            //fyller datatable osv...

            return dataTable;
        }

        public void AddInParameter(string ParamName, SqlDbType DbType, object Value)
        {
            if (_parameters == null)
                _parameters = new ArrayList();

            SqlParameter param = new SqlParameter(ParamName, DbType);
            param.Direction = ParameterDirection.Input;
            param.Value = Value;
            _parameters.Add(param);
        }
```

```
            DataManager dm = new DataManager();
            dm.AddInParameter("@para1", System.Data.SqlDbType.NVarChar, foo);
            dm.AddInParameter("@para2", System.Data.SqlDbType.NVarChar, bar);
            DataTable dt = dm.GetTable("[spnamnet]");
```

det som känns fel är att jag samlar parametrarna i en otypad arraylist (jag har inte ens vågat testköra om koden funkar!)   :l 
så, hur skulle ni gjort?   :)

Permalänk: https://www.webforum.nu/p/167285

## #2 — Gladh, 2007-12-15T14:44Z

Jag hade haft en lista med IDbParameter istället.

```
List<IDbParameter> ParameterList = new List<IDbParameter>()
```

Då är din lista typsäker, samt att om du vill ändra från Sql till MySql så slipper du tänka på din lista eftersom den tar emot Interfacet och inte själva typen. Nu vet jag inte om den heter IDbParameter eller IParameter eller IDataParameter, men du hittar den säkert.

\- M

Permalänk: https://www.webforum.nu/p/2061311

## #3 — Coercri, 2007-12-18T07:26Z

Hur går det för dig doggelito? Har du fått til l det? Jag är lite nyfiken på lösningen nämligen :)

Permalänk: https://www.webforum.nu/p/2061772

## #4 — doggelito, 2007-12-18T08:06Z

Tjaba!
Jag har inte haft tid att testa tidigare men jag tvivlade aldrig på att Gladhs kod inte skulle funka, och visst gör den det! Tack Gladh! :bire

Coercri, så här blev det:
DAL

```
public class DataManager
    {
        private List<IDataParameter> _parameterList;

        public void AddInParameter(string ParamName, SqlDbType DbType, object Value)
        {
            if (_parameterList == null)
                _parameterList = new List<IDataParameter>();

            SqlParameter param = new SqlParameter(ParamName, DbType);
            param.Direction = ParameterDirection.Input;
            param.Value = Value;
            _parameterList.Add(param);
        }

        public DataTable GetTable(string selectCommand)
        {
            SqlConnection connection = new SqlConnection(_ConnectionString);
            SqlCommand command = new SqlCommand(selectCommand, connection);
            command.CommandType = CommandType.StoredProcedure;

            SqlDataAdapter dataAdapter = null;
            DataTable dataTable = null;

            
            if(_parameterList != null)
                foreach (SqlParameter p in _parameterList)
                    command.Parameters.Add(p);

            //fyll table osv......
        }
    }
```

Sen testade jag att bara binda en repeater, koden ska naturligtvis ligga i Affärslagret vid produktion.
BLL

```
        DataManager dm = new DataManager();

        dm.AddInParameter("@parameter1", SqlDbType.NVarChar, "test");
        dm.AddInParameter("@parameter2", SqlDbType.NVarChar, "test2");
        dm.AddInParameter("@parameter3", SqlDbType.Int, 0);

        DataTable source = dm.GetTable("storedprocedure_namn");

        Repeater1.DataSource = source;
        Repeater1.DataBind();
```

Det jag kan tycka vara lite förvirrande med detta är att IDataParametern tillåter en sqlparameter som värde.
Jag får nog ta och läsa på lite om gränssnitt över julen! :)

Permalänk: https://www.webforum.nu/p/2061777

## #5 — CatZ, 2007-12-18T09:02Z

Hmm, jag är fortfarande ute och svävar i det blå när när det gäller det här. Jag har ungefär samma.

Jag kör ju med en IList för att binda datan till mina objekt. iDataParameter är ju typoberoende om jag förstått det rätt. Dvs du kan stoppa in vilken jäkla parameter som helst i den funktionen. Så länge din GetTable använder sig av SqlParameter så är det lugnt. Det jag hade gjort om jag var du vore att kolla vilken typ av parameter det är den ska lägga till något i stil med följande så att din kod blir ännu mer återanvändningsbar 

```
public void AddInParameter(string ParamName, SqlDbType DbType, object Value)
{
	if (_parameterList == null)
		_parameterList = new List<IDataParameter>();
	{
		if (DbType.Equals(typeof(SqlDbType)))
		{
			SqlParameter param = new SqlParameter(ParamName, DbType);
			param.Direction = ParameterDirection.Input;
			param.Value = Value;
			_parameterList.Add(param);
		}
	}
}
```

Vet inte om det blir det bästa och det är otestat men om du gör på det viset från början kommer du lätt kunna byta ut datakällor i framtiden.

Permalänk: https://www.webforum.nu/p/2061785

## #6 — doggelito, 2007-12-18T09:11Z

Mm, det har du helt rätt i! :)
Jag måste också bygga om min GetTable-metod, för nu är den låst på sqlserver.

Man skulle kanske ha ett huvud-DAL och sedan ärva ner det i ett sql-DAL (om det är sql man använder) eller i ett oracle-DAL osv. för att slippa hundra if-satser? Eller?   :stud

Permalänk: https://www.webforum.nu/p/2061787

## #7 — CatZ, 2007-12-18T09:18Z

> **doggelito skrev:**
>
> Man skulle kanske ha ett huvud-DAL och sedan ärva ner det i ett sql-DAL (om det är sql man använder) eller i ett oracle-DAL osv. för att slippa hundra if-satser? Eller?   :stud

Errm jo det förstås! Det blir ju inte så snyggt med en massa if-satser.

Permalänk: https://www.webforum.nu/p/2061788

---

Tråden på webben: https://www.webforum.nu/amne/dotnet/167285-hur-få-in-parameters-i-dal
