0

I'm having problems with rest services. I'm trying to post an object but it gives me an error:

An exception of type 'System.FormatException' occurred in KnjiznicaStoritev.dll but was not handled in user code

Additional information: Input string was not in a correct format.

Here is my code:

public void DodajKnjigo(Knjiga knjiga)
{
    string connString = null;

    try
    {
        connString = "server=localhost;userid=;password=;database=";
        MySqlConnection conn = new MySqlConnection(connString);
        MySqlCommand comm = conn.CreateCommand();
        comm.CommandText = "INSERT INTO knjiga (idKnjiga, naslov, leto_izdaje, st_strani, koda, status)"
            +" VALUES (@idKnjiga, @naslov, @leto_izdaje, @st_strani, @koda, @status)";
        comm.Parameters.Add("idKnjiga", System.Data.SqlDbType.Int).Value = knjiga.idKnjiga;
        comm.Parameters.Add("naslov", System.Data.SqlDbType.VarChar).Value = knjiga.naslov;
        comm.Parameters.Add("leto_izdaje", System.Data.SqlDbType.Int).Value = knjiga.leto_izdaje;
        comm.Parameters.Add("st_strani", System.Data.SqlDbType.Int).Value = knjiga.st_strani;
        comm.Parameters.Add("koda", System.Data.SqlDbType.VarChar).Value = knjiga.koda;
        comm.Parameters.Add("status", System.Data.SqlDbType.VarChar).Value = knjiga.status;

        conn.Open();

        int dodanih = comm.ExecuteNonQuery();
        if (dodanih > 0)
        {
            UriTemplateMatch match = WebOperationContext.Current.IncomingRequest.UriTemplateMatch;

            UriTemplate template = new UriTemplate("/knjiga/{idKnjiga}");
            Uri novaKnjigaUri = template.BindByPosition(match.BaseUri, knjiga.idKnjiga.ToString());
            WebOperationContext.Current.OutgoingResponse.SetStatusAsCreated(novaKnjigaUri);
        }
        conn.Close();
    }
    catch (Exception)
    {

        throw;
    }
}

This is my post request:

{
  "idKnjiga": 7,
  "naslov": "M Vaqqas",
  "leto_izdaje": 1997,
  "st_strani": 322,
  "koda": "E50532",
  "status": "Na izposojo"
}

Class that I'm trying to post:

[DataContract(Namespace ="http://localhost:30366/knjige")]
public class Knjiga
{
    [DataMember]
    public int idKnjiga { get; set; }
    [DataMember]
    public string naslov { get; set; }
    [DataMember]
    public int leto_izdaje { get; set; }
    [DataMember]
    public int st_strani { get; set; }
    [DataMember]
    public string koda { get; set; }
    [DataMember]
    public string status { get; set; }

    public Knjiga() { }
}

This is my operation contract:

[OperationContract]
[WebInvoke(Method = "POST", UriTemplate = "/knjiga", BodyStyle = WebMessageBodyStyle.Bare)]
void DodajKnjigo(Knjiga knjiga);

Some database information:

Here is table knjiga

Data from table knjiga

I really don't understand why is giving me a wrong format error

Thank you for help!

klemsi123
  • 103
  • 1
  • 11

2 Answers2

1

Try to modify your catch as follows:

catch (Exception e)
{
    Console.Write(e.Message);
    Console.Write(e.StackTrace);

    throw;
}

This will give you a more detailed description of the Exception

Simone Cifani
  • 784
  • 4
  • 14
0

I finally found the solution. It was problem in this parameters statements. It should be like that.

comm.CommandText = "INSERT INTO knjiga (idKnjiga, naslov, leto_izdaje, st_strani, koda, status)"
    +" VALUES (@idKnjiga, @naslov, @leto_izdaje, @st_strani, @koda, @status)";

comm.Parameters.AddWithValue("@idKnjiga", knjiga.idKnjiga);
comm.Parameters.AddWithValue("@naslov", knjiga.naslov);
comm.Parameters.AddWithValue("@leto_izdaje", knjiga.leto_izdaje);
comm.Parameters.AddWithValue("@st_strani", knjiga.st_strani);
comm.Parameters.AddWithValue("@koda", knjiga.koda);
comm.Parameters.AddWithValue("@status", knjiga.status);
klemsi123
  • 103
  • 1
  • 11