---
title: "Deklarera parameter"
type: "forum-thread"
url: "https://www.webforum.nu/amne/dotnet/152665-deklarera-parameter"
topic: ".NET"
topic_url: "https://www.webforum.nu/amne/dotnet"
author: "Nevvy"
published: "2006-10-17T16:17:32.000Z"
updated: "2006-10-17T19:51:11.000Z"
replies: 3
views: 302
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/152665-deklarera-parameter"
---

# Deklarera parameter

## #1 — Nevvy, 2006-10-17T16:17Z

Hej,
Jag skall deklarera parameter för att kunna hämta selekterad data från en sql-db.
Men jag får meddelande att:
 Must declare the variable '@City'.
Trodde det var det jag gjorde i metoderna AddParameters och setParameters
Jag anropar DbRead från webbsidans codeBehind och dbRead skall vara generell och ta emot anrop från alla håll på webbplatsen.
Kan någon se vad felet är?

public DataTable DbRead(string sqlString, string parameter, string value, DbType dbType)
     {
         SqlConnection dbConnection = CreateConnection();
         IDbCommand cmd = dbComm.CreateCommand(sqlString);
         AddParameter(cmd, parameter, dbType);
         
         dbConnection.Open();
         SetParameter(cmd, parameter, value);
         SqlCommand read = new SqlCommand(sqlString, dbConnection);
         DataTable dataTable = new DataTable();
         dataAdapter.SelectCommand = read;
        //här får jag fel Must declare the variable '@City'.         
         dataAdapter.Fill(dataTable);
         dbConnection.Close();
         return dataTable;
    }

 private System.Data.IDbCommand CreateCommand(string query)
        {
            return new SqlCommand(query);
        }

        private void AddParameter(IDbCommand cmd, string name, DbType type)
        {
            IDbDataParameter param = cmd.CreateParameter();
            param.ParameterName = name;
            param.DbType = type;
            cmd.Parameters.Add(param);
        }

        private void SetParameter(IDbCommand cmd, string name, object value)
        {
            (cmd.Parameters\[name\] as IDbDataParameter).Value = value;
        }

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

## #2 — emission, 2006-10-17T18:30Z

Du sätter parametern på "cmd", men exekverar kommandot "read".

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

## #3 — Nevvy, 2006-10-17T19:18Z

dataAdapter.SelectCommand = cmd;???

funkade inte,

F'låt men jag är nybörjare...

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

## #4 — echoSwe, 2006-10-17T19:51Z

```
	private void AddParameter([blue]ref[/blue] IDbCommand cmd, string name, DbType type)
	{
		IDbDataParameter param = cmd.CreateParameter();
		param.ParameterName = name;
		param.DbType = type;
		cmd.Parameters.Add(param);
	}
```

Testa det. Annars får du ge mig hur du bygger din SQL-fråga också. Om det står att den inte deklareras så handlar det om att du inte får in din IDbDataParameter i din IDbCommand.

Din metod, som jag förändrade ovan, gjorde jobb på ett privat object, som inte uppdaterade object-et du skickade med som parameter. "ref" uppdaterar även ditt object, förutsatt att du har initierat det innan du skickar med det.

Sedan har du ju ingen DataAdapter, i alla fall inte i koden du skickade med. Och .Fill(...) stänger själv anslutningen till databasen. Så 
		dbConnection.Close();
behövs inte.

Men du kan väl skriva "dataAdapter.Dispose();".

Sedan kan du skriva:

```
	public IDbCommand CreateCommand()
	{
		return objDefaultConn.CreateCommand();
	}
```

Hellre än

```
	private System.Data.IDbCommand CreateCommand(string query)
	{
		return new SqlCommand(query);
	}
```

så blir det lite mer flexibelt.

EDIT:
Förutom det jag har skrivit så skriver du:

```
dbConnection.Open();
```

 Vilket då inte heller behövs.
Samt:

```
	AddParameter(cmd, parameter, dbType);
```

 som jag redan har förklarat, varför det inte fungerar, men det fungerar inte av ännu en anledning: att du skapar två Command. Först

```
		IDbCommand cmd = dbComm.CreateCommand(sqlString);
```

 sedan 

```
		SqlCommand read = new SqlCommand(sqlString, dbConnection);
```

och använder den senare trots att du (inte) satte parametrar på "cmd"-objektet. (inte = att den inte uppdateras eftersom du inte har ref)

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

---

Tråden på webben: https://www.webforum.nu/amne/dotnet/152665-deklarera-parameter
