0

通过 wcf 将数据存储到数据库时出现错误。我正在通过文本框从 android 客户端获取输入。 错误:参数化查询“(@ID nvarchar(4000),@Name nvarchar(4000),@Project nvarchar(4000)”需要参数“@ID”,但未提供该参数。

数据插入的c#代码是

 [DataContract]
    public class studentinfo
    {
        [DataMember(Name = "ID")]
        public string ID { get; set; }

        [DataMember(Name = "Name")]
        public string Name { get; set; }

        [DataMember(Name = "Project")]
        public string Project { get; set; }

        [DataMember(Name = "Result")]
        public string Result { get; set; }


    }

  [OperationContract]
        [WebInvoke(Method = "POST", RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json, UriTemplate = "SaveData")]
        void SaveData(studentinfo studentinfo);



 public void SaveData(studentinfo studentinfo)
    {
        SqlConnection con;


        con = new SqlConnection(ConfigurationManager.ConnectionStrings["Myproject.Properties.Settings.MyConnection"].ConnectionString);

        if (con.State == ConnectionState.Closed)
        {
            con.Open();
        }



    SqlCommand cmd = new SqlCommand("INSERT INTO Result (ID,Name,Project,Result) values(@ID,@Name,@Project,@Result)", con);

    cmd.Parameters.AddWithValue("@ID", studentinfo.ID);

    cmd.Parameters.AddWithValue("@Name", studentinfo.Name);

    cmd.Parameters.AddWithValue("@Project", studentinfo.Project);

    cmd.Parameters.AddWithValue("@Result", studentinfo.Result);


    int Valid = cmd.ExecuteNonQuery();



    con.Close();

}

编辑:这是android客户端代码:

public class MarksActivity extends Activity {

     private final static String SERVICE_URI = "http://10.0.2.2:51220/Service1.svc";
    Button btnsave, btncal;
    EditText txtid, txtname, txtproject, txtviva, txtpres, txtconfi, txtsystem, txttotal;
    double h=0;
    double s=0;
    double x=0;
    double y=0;
    double z=0;
    String text;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.marks);

        btnsave=(Button)findViewById(R.id.btnsave);

        text    = "";

        btncal=(Button)findViewById(R.id.btncal);


        txtid=(EditText)findViewById(R.id.txtid);
        txtname=(EditText)findViewById(R.id.txtname);
        txtproject=(EditText)findViewById(R.id.txtproject);
        txttotal=(EditText)findViewById(R.id.txttotal);

        txtviva=(EditText)findViewById(R.id.txtviva);
        txtpres=(EditText)findViewById(R.id.txtpres);
        txtconfi=(EditText)findViewById(R.id.txtconfi);
        txtsystem=(EditText)findViewById(R.id.txtsystem);

        btnsave.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {
                saveData();
                }
            });


}



    public void saveData() {




        try{

            boolean isValid = true;


                h=Double.parseDouble(txtviva.getText().toString());
                s=Double.parseDouble(txtpres.getText().toString());
                x=Double.parseDouble(txtconfi.getText().toString());
                y=Double.parseDouble(txtsystem.getText().toString());
                  z= h+s+x+y;
                  txttotal.setText(Double.toString(z));




                  if (isValid) {

                        // POST request to <service>/SaveVehicle


                    //Connect to the server
                    HttpPost httpPost=new HttpPost(SERVICE_URI +"/SaveData");
                    httpPost.setHeader("Accept", "application/json");
                    httpPost.setHeader("Content-type", "application/json");

                        // Build JSON string
                        JSONStringer getdata = new JSONStringer()
                            .object()
                                .key("studentinfo")
                                    .object()
                                        .key("ID").value(txtid.getText().toString())
                                        .key("Name").value(txtname.getText().toString())
                                        .key("Project").value(txtproject.getText().toString())
                                        .key("Result").value(txttotal.getText().toString())
                                    .endObject()
                                .endObject();
                        StringEntity entity = new StringEntity(getdata.toString());

                        httpPost.setEntity(entity);

                        // Send request to WCF service
                        DefaultHttpClient httpClient = new DefaultHttpClient();
                        HttpResponse response = httpClient.execute(httpPost);

                        Log.d("WebInvoke", "Saving : " + response.getStatusLine().getStatusCode());

                        // Reload plate numbers

                    }

                } catch (Exception e) {
                    e.printStackTrace();
                }


        }

    }

我确实尝试了其他答案中提供的一些方法,但无法解决这个问题。请帮我解决它

4

1 回答 1

0

你的studentinfo.ID价值有可能是null?如果要将 null 作为参数传递,则需要使用DBNullhttp://msdn.microsoft.com/en-us/library/system.dbnull.aspx

杰森

于 2013-08-27T22:47:53.753 回答