Hi there,

I'm currently rewriting some database logic. On the project I use a SQL Server 2005 database and make use of Enterpise Library 3.1.

Look at the following code:

public void InsertItem(Item item)
{
    try
    {
        string sqlCommand = "INSERT INTO Items (Id, Name, subject, CreateDate, Message, ParentId) VALUES (@Id, @Name, @Subject, @CreateDate, @Message, @ParentId)";
        DBCommand dbCommand = database.GetSqlStringCommand(sqlCommand) ;
        AddParameters(dbCommand, item);
        database.ExecuteNonQuery(dbCommand);
    }
    catch (Exception ex)
    {
        throw ex;
    }
}

private void AddParameters(DbCommand dbCommand, Item item)
{
            dbCommand.Parameters.Add(new SqlParameter("@Id", SqlDbType.UniqueIdentifier).Value = item.Id );
            dbCommand.Parameters.Add(new SqlParameter("@Name", SqlDbType.NChar, 50).Value = item.Naam);
            dbCommand.Parameters.Add(new SqlParameter("@Subject", SqlDbType.NChar, 50).Value = item.Onderwerp);
            dbCommand.Parameters.Add(new SqlParameter("@CreateDate", SqlDbType.DateTime).Value = item.Datum);
            dbCommand.Parameters.Add(new SqlParameter("@Message", SqlDbType.NText).Value = item.Bericht);
            dbCommand.Parameters.Add(new SqlParameter("@ParentId", SqlDbType.UniqueIdentifier).Value = item.Id);
}

Why on earth do I get the following exception?:

De SqlParameterCollection accepteert alleen objecten van het type SqlParameter die niet-null zijn en geen objecten van het type Guid.

In plain old english:

The SqlParameterCollection only accepts non-null SqlParameter type objects, not Guid objects

I then rewrote my code to:

SqlParameter sqlParameter = new SqlParameter();
sqlParameter.ParameterName = "@Id";
sqlParameter.DbType = DbType.Guid;
sqlParameter.SqlDbType = SqlDbType.UniqueIdentifier;
sqlParameter.Value = item.Id;

dbCommand.Parameters.Add(sqlParameter);


and that for every parameter. I guess it is really necessary to intialize the DBType as well, something I expected to be happening under the hood. Cause the code above does work indeed!

Anybody who has got different ideas or better suggestions?

Hope this is usefull!

gr,

Robbert
Digg It!DZone It!StumbleUponTechnoratiRedditDel.icio.usNewsVineFurlBlinkList