Checkbox in een database

Status
Niet open voor verdere reacties.

gast0514

Gebruiker
Lid geworden
8 okt 2007
Berichten
43
Goeiemorgen,

Ik heb een CheckBox in een database gezet. Zonder verder iets geks gedaan te hebben krijg ik bij het testen al een error:

System.FormatException: Ongeldige conversie van System.Boolean naar System.Byte[]
(en dan nog een half scherm vol tekts)

Ik dacht dat de foutmelding misschien kwam doordat ik een verkeerde Data Type gebruikt heb (Binary(1)), maar ook wanneer ik als Data Type kies voor bit of int krijg ik dezelfde foutmelding. (nee ik kan niet gewoon Boolean kiezen.)

Heb ik misschien een code nodig de boel te converteren?

Wie oh wie kan mij uit de brand helpen?

Alvast bedankt!
 
Is het bij het uit de database halen van data of bij het versturen naar de database?
Kan je dat eruit opmaken?


Voor het coverteren van ene datatype naar de andere heb je de volgende code:
Code:
voorbeeld:
System.Convert.ToInt16(Stringvalue);
System.Convert.ToString(booleanvalue);
 
Ongeldige conversie van System.Boolean naar System.Byte

De foutmelding heeft het over "conversie van System.Boolean naar System.Byte"

Het lijkt mij het meest logisch dat je bij het invullen van een CheckBox een Boolean 'verstuurt'. Die Boolean wil ie vervolgens converteren naar een Byte.
Dus antwoord op je vraag: ik denk dat het probleem zich voordoet bij het verzenden naar de database.

Kun je me vertellen waar ik die code om te converteren toe moet passen? En dan zou het dus

Code:
System.Convert.ToByte(booleanvalue);

moeten zijn?

Mvg Remy
 
ja, dat zou dan de manier zijn.

Of je zou anders een int mee kunnen sturen.

Code:
System.Convert.ToInt16(booleanvalue);

Hoe ziet je code eruit waar je de gegevens naar de database stuurt?
 
Ik weet niet waar je die (automatisch gegenereerde?) code kan vinden? Ik heb hier zelf iig geen code voor geschreven.

Ik heb (in Visual C#) in de Database Explorer een nieuwe Table aangemaakt. Vervolgens via Data Source in een
DataSet gezet, en deze als een grid naar een Form gesleept.

Wanneer ik hem dan debug en een paar vinkjes in de CheckBoxen zet krijg ik die error.

Maar goed dat t weer bijna weekeind is ;)
 
Ik zou als ik jou was gebruik maken van bit.
Een bit is 1 of 0, precies datgene wat boolean ook kan zijn.
Een byte kan meerdere waardes hebben (8 bits), en mapped dus
niet direct op een boolean.

Tevens zou ik in de database vermelden dat de waarde niet null mag wezen. Deze waarde moet dus ingevuld zijn. Een boolean is 1 of 0 (niet null).
 
Het jammere is, je kan niet converten naar een bit.
De variabele die je kan maken mbt bits is een bitarray. Dat is een array met booleans.
 
@ Jabber:

Bedankt voor je reactie. Ik kan echter alleen kiezen tussen:

bigint, binary(50), nchar, ntext, numeric(18, 0), nvarchar(50), nvarchar(MAX), real, smalldatetime, smallint, smallmoney, sql_variant, text, timestamp, tinyint, uniqueidentifier, varbinary(50), varbinary(MAX), varchar(50), varchar(MAX) xml.

binary(1) accepteert ie ook, leek mij het meest logisch, maar toch krijg ik die error.
Dat van die NULL had ik ook al geprobeerd maar dat veranderde niks.

Morgen kan ik terecht bij een leraar, misschien dat die me kan helpen.
Lijkt mij dat t toch nie zo moeilijk moet zijn om een checkboxie in een database te zetten.

Mvg Remy
 
als je volgend de auto genereerde code werkt moet VS2005 automatisch de checked waarde van je checkbox omzetten naar een bit.

welke database gebruik je ?
 
als je volgend de auto genereerde code werkt moet VS2005 automatisch de checked waarde van je checkbox omzetten naar een bit.

welke database gebruik je ?

Je kan in C# niet voor het type 'bit' kiezen.
Het dichtsbijzijnde wat je kan kiezen is een 'bitarray'. Dat is een array met booleans.
 
Toch heel apart:
Ik kan in de de SQL Express database gewoon bit selecteren.

In Visual Studio 2005 gebruik ik System.Boolean om in te vullen.
res.Tables[0].Rows[idx]["blnType"] = MyClass.blnType;

Dit heb ik gedaan door ADO.NET te gebruiken.
Het volgende zal ook wel werken om op te halen:

Code:
DbConnection connection = MyClassDbConnection;
DbCommand command = connection.CreateCommand();
command.CommandText = @"SELECT blnValue FROM [TABLE]";

connection.Open();
DbDataReader reader = command.ExecuteReader();

while (reader.Read())
{
  MyClass clas = new MyClass();
  clas.blnType = (Boolean)reader["blnType"];
}

connection.Close();

Om te inserten:

Code:
DbConnection connection = MyClassDbConnection;
DbCommand command = connection.CreateCommand();
command.CommandText =
          @"INSERT INTO [TABLE] " +
          @"([blnType]) " +  @"VALUES (@blnType);";

DbParameter param = command.CreateParameter();
param.ParameterName = "@blnType";
param.DbType = System.Data.DbType.Boolean;
param.Value = MyClass.blnType;
command.Parameters.Add(param);

connection.Open();
command.ExecuteNonQuery();
connection.Close();

Ik hoop je hiermee een beetje op weg geholpen te hebben.
 
Bedankt Jabber!

(Sorry voor de late reactie, ik was op vakantie!)

Mvg Remy
 
Laatst bewerkt:
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan