webForumDet fria alternativet

Problem med lagerkommunikation

.NET

12 svar · 809 visningar · startad av echoSwe

Medlem sedan nov. 20041 189 inlägg
Frågan#1

Tja

Får detta felet

 Exception Details: MySql.Data.MySqlClient.MySqlException: #42000You have an error in your SQL syntax; 
check the manual that corresponds to your MySQL server version for the right syntax to use near '* FROM blog_entries WHERE entryId = '@entryId'' at line 1

Source Error:
Line 41:    public int RunNonQuery(IDbCommand command)
Line 42:    {
Line 43:         MySqlCommand objCmd = (MySqlCommand)command;
Line 44:         objCmd.Connection.Open();
[red]Line 45:         return objCmd.ExecuteNonQuery();[/red]
Line 46:     }
Line 47: 

Source File: d:\WD\hafse\App_Code\MySQL_DAL.cs    Line: 45

Härifrån kommer SQL-en:

    public string DeleteEntry(string _entryId)
    {
		DataAccessLayer oDal = new DataAccessLayer();
        System.Data.IDbCommand objCmd = oDal.CreateCommand();
		objCmd.CommandText = "DELETE FROM blog_entries WHERE entryId = '@entryId';";

		System.Data.IDataParameter objParam_Del = objCmd.CreateParameter();
        objParam_Del.ParameterName = "@entryId";
        objParam_Del.Value = _entryId.ToString();
	objParam_Del.DbType = DbType.String;
        objCmd.Parameters.Add(objParam_Del);

        return "Rows affected: " + Convert.ToString(oDal.RunNonQuery(objCmd));
    }

Summa summarum så är det så att den inte lägger till parametern i command-objektets "CommandText". Hur gör jag för att den ska lägga till parametrar??

Medlem sedan sep. 20011 914 inlägg
#2
"DELETE FROM blog_entries WHERE entryId = '@entryId';";
Medlem sedan nov. 20041 189 inlägg
#3

Dino - det har du helt rätt i, fixat.
Dock tror jag grundproblemet är att den inte lägger till parametrarna - det är nog det som jag behöver hjälp med. Om jag kör en trace:

			System.Web.HttpContext.Current.Trace.Write("MySQL DAL DELETE", objCmd.CommandText.ToString());

i mitt DAL så blir svaret:

MySQL DAL DELETE DELETE FROM blog_entries WHERE entryId = '@entryId';

och MySQL-databasen returnerar 0 - dvs inga rader påverkades.

Medlem sedan sep. 20011 914 inlägg
#4
"DELETE FROM blog_entries WHERE entryId = @entryId";
Medlem sedan nov. 20041 189 inlägg
#5

Jo, det har jag testat.

Medlem sedan nov. 20041 189 inlägg
#6

Så hur gör jag för att få den att lägga till mina parametrar?

Medlem sedan apr. 200487 inlägg
#7

Hej, i Mysql ska du köra ? på parameterar istället för @
Alltså:

"DELETE FROM blog_entries WHERE entryId = ?entryId";
Medlem sedan nov. 20041 189 inlägg
#8

Hmm, det funkade inte?

Medlem sedan nov. 20041 189 inlägg
#9

Testade lite till och det verkar fortfarande inte fungera...?

Medlem sedan dec. 2005664 inlägg
#10

wallabou skrev:

Hej, i Mysql ska du köra ? på parameterar istället för @
Alltså:

"DELETE FROM blog_entries WHERE entryId = ?entryId";

Var har du fått detta ifrån?

Medlem sedan nov. 20041 189 inlägg
#11

Du kanske kan hjälpa mig att få det att fungera med parametrar - gör jag rätt?

Medlem sedan nov. 20041 189 inlägg
#12
       System.Data.IDbCommand objCmd = oDal.CreateCommand();
		objCmd.CommandText = "DELETE FROM blog_entries WHERE entryId = ?entryId;";

		System.Data.IDataParameter objParam_Del = objCmd.CreateParameter();
        objParam_Del.ParameterName = "?entryId";
        objParam_Del.Value = _entryId.ToString();
        objCmd.Parameters.Add(objParam_Del);
		string result;

			result = "Rows affected: " + oDal.RunNonQuery(objCmd).ToString();
Medlem sedan nov. 20041 189 inlägg
#13

If you have many parameters you want to add to a command, use

objParam_Del = objCmd.CreateParameter();

for each parameter, not instantiating a new parameter, but rather creating a new instance of it from the command object.

265 ms totalt · 4 externa anrop · v20260731065814-full.a51de22e
118 ms — deklarationer (db)
0 ms — hämta statistik (cache)
136 ms — hämta tråd, inlägg och bilagor (db)
126 ms — ändringar (db)