2017-04-26 7 views
0

私は休憩サービスに問題があります。私は、オブジェクトを投稿しようとしているが、それは私にエラーを与える:MySqlパラメータ文C#rest web services

型「にSystem.FormatException」の例外がKnjiznicaStoritev.dllで発生したが、ユーザーコードで

追加情報を扱っていなかった:入力文字列でした正しい形式ではありません。ここで

は私のコードです:

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; 
    } 
} 

これは私のポスト要求である:私はポストにしようとしている

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

クラス:

[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() { } 
} 

これは私の運転の契約であります:

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

一部のデータベース情報:

Here is table knjiga

Data from table knjiga

私は本当に私に間違ったフォーマットエラーを与えている理由

が助けてくれてありがとう理解していません!

答えて

0

の詳細な説明を行います。このパラメータステートメントでは問題でした。それはそうでなければなりません。

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); 
+0

これは簡単で、効果的で、実際に動作します。 – klemsi123

1

は、次のようにあなたのキャッチを変更しよう:

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

    throw; 
} 

これはあなたに私が最終的に解決策を見つけた例外