[c#] mysql null värden med sqlstring

Permalänk
Medlem

[c#] mysql null värden med sqlstring

Hej.

Jag är rätt ny på att jobba med databaser och hoppas någon kan hjälpa mig med en grej.
Jag vill kunna lagra null värden på en del kolumner. använder sqlint32 och sqlstring för att hantera null värden.

problemet är att jag verkar inte kunna använda sqlstring tillsammans med MySqlCommand. det verkar gå bra med sqlint32 men inte med sqlstring. får det här felet:

Error 1 Operator '+' cannot be applied to operands of type 'System.Data.SqlTypes.SqlString' and 'System.Data.SqlTypes.SqlInt32'

Kod exempel:

SqlString namn = SqlString.Null; MySqlCommand cmd = new MySqlCommand(); cmd.CommandText = "insert into personer (namn)" + "values('" + namn + ");";

Visa signatur

| Ryzen 5800x | Asus prime x470 pro | Asus rtx 3080 tuf oc | Gskill 32gb 3,6ghz | aw3225qf |

Permalänk
Medlem
Skrivet av Ragin Pig:

Hej.

Jag är rätt ny på att jobba med databaser och hoppas någon kan hjälpa mig med en grej.
Jag vill kunna lagra null värden på en del kolumner. använder sqlint32 och sqlstring för att hantera null värden.

problemet är att jag verkar inte kunna använda sqlstring tillsammans med MySqlCommand. det verkar gå bra med sqlint32 men inte med sqlstring. får det här felet:

Error 1 Operator '+' cannot be applied to operands of type 'System.Data.SqlTypes.SqlString' and 'System.Data.SqlTypes.SqlInt32'

Kod exempel:

SqlString namn = SqlString.Null; MySqlCommand cmd = new MySqlCommand(); cmd.CommandText = "insert into personer (namn)" + "values('" + namn + ");";

insert into personer (namn) values (null)

Visa signatur

ηλί, ηλί, λαμά σαβαχθανί!?

Permalänk
Medlem

SqlString och SqlInt32 är mig vetligen gjorda för att användas med MS SQL Server, så jag är osäker på hur väl det kommer funka att använda med MySql.

Det låter som att ditt felmeddelande beror på att du försöker använda + mellan en SqlString och en SqlInt32. Har du testat att göra det i två steg istället? (så att ena parametern alltid är en String) Det kommer antagligen gå betydligt bättre.

Jag hoppas även att det bara är här när du ska sätta värdet till null som du använder string concatenation för att bygga ditt kommando, och använder parameteriserade queries när du inte i förväg vet vad för något det är du försöker sätta in.

Visa signatur

"A good discussion is like a miniskirt; Short enough to pertain interest and long enough to cover the subject"
何回やっても何回やってもエロゲが終わらない

Permalänk
Medlem

använder mig inte av MySql själv, men efter lite snabb efterforskning, så bör du kunna skriva såhär:

using(var connection = new MySqlConnection(connectionString)) using(var command = new MySqlCommand("INSERT INTO personer (namn) VALUES (?namn)", connection)) { // ändra till din datatyp och fältstorlek. command.Parameters.Add("?namn", MySqlDbType.VarChar, 100).Value = namn; // eller skriv så här istället //command.Parameters.AddWithValue("?namn", namn); command.Connection.Open(); command.ExecuteNonQuery(); command.Connection.Close(); }

sen behöver du nog inte använda SqlString och SqlInt32 för att hantera dina variabler. en vanlig string kan inta "värdet" null och du kan sätta en int som nullable genom att skriva int? (eller om man vill skriva det lite mer explicit, Nullable<int>).

string foo = null; int? bar = null; Nullable<int> fooBar = null;

Using Nullable Types (C# Programming Guide)

Visa signatur

as far as we can tell, the massacre went well...

Permalänk
Medlem

Tack för svaren!

Skrivet av Xaanin:

Jag hoppas även att det bara är här när du ska sätta värdet till null som du använder string concatenation för att bygga ditt kommando, och använder parameteriserade queries när du inte i förväg vet vad för något det är du försöker sätta in.

ok, jo det gör jag faktiskt. menar du att det skulle vara bättre att skriva typ cmd = "select * from @table;", table); ?

Visa signatur

| Ryzen 5800x | Asus prime x470 pro | Asus rtx 3080 tuf oc | Gskill 32gb 3,6ghz | aw3225qf |