saving object to database c#

2019-09-11 16:50发布

问题:

I'm having class Report and class Program, what I want to accomplish (no luck so far) is to send data from class Program and method SaveRep() to class Report method Save() and save it in this method.

I apologize if the question is badly formulated, I am really stuck at this, please help. Thanks

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
using System.Configuration;
using System.Data.SqlClient;

namespace Application
{
 class Program
 {
    static void Main(string[] args)
    {            
        //call method SaveRep
    }

    public void SaveRep(...)
    {
       int RepID = 1;
       string Data1 = "SomeData1"
       string Data2 = "SomeData2"

       //This method should send the data above to method Save() in Report class
       //data to this method will be provided from another method.
    }        
  }

  public class Report
  {
    private static int _repID;
    public int RepID
    {
        get { return _repID; }
        set { _repID = value; }
    }

    private static string _data1;       
    public string Data1
    {
        get { return _data1; }
        set { _data1 = value; }
    }

    private static string __data2;
    public string Data1
    {
        get { return _data2; }
        set { _data2 = value; }
    }

    public void Save()
    {
        string strConnectionString = (@"server=(local)\sqlexpress;Integrated Security=True;database=DataBase");

        SqlConnection connection = new SqlConnection(strConnectionString);
        connection.Open();

        // This method should save  all data (RepID,Data1,Data2)
        // to the DB, provided to her by SaveRep method from Program class.
        // Properties are columns from a database
    }
  }
}

回答1:

public void Save()
{
  string yourConnString="Replace with Your Database ConnectionString";
  using(SqlConnection connection = new SqlConnection(yourConnString))
  {    
     string sqlStatement = "INSERT Table1(Data1) VALUES(@Data1)";
     using(SqlCommand cmd = new SqlCommand(sqlStatement, connection))
     {
        cmd.CommandType = CommandType.Text;
        cmd.Parameters.AddWithValue("@Data1",Data1);
       //add more parameters as needed  and update insert query

        try
        {
           connection.Open();
           cmd.ExecuteNonQuery();
        }
        catch(Exception ex)
        {
          //log error
        }    
     }
  }
 }

Assuming your Data1 is the name of your Column name. Update the sqlStatement to have your relevant columns.

Now in SaveRep, you can call it like

 public void SaveRep()
 {
   Report objReport=new Report();
   objReport.Data1="Something somethinng";
   objReport.Save();
 }


回答2:

    string connectionString = ....; //adjust your connection string

    string queryString = "INSERT INTO ....;"; //Adjust your query
    using (SqlConnection connection = new SqlConnection(
               connectionString))
    {
        using( SqlCommand command = new SqlCommand(
            queryString, connection))
        {
        connection.Open();
        command .ExecuteNonQuery();
       }
    }


回答3:

One tiny thing that the previous speakers have not noticed, is that your Report class is severely broken. Why did you use static keywords on the variables? Do not do that! Well, unless you know what it does, and here I have the feeling you don't. Update your Report class to look like this:

public class Report
{
    public int RepID {get;set;}
    public string Data1 {get;set;}
    public string Data2 {get;set;}

    public void Save()
    {
        // what others said
    }
}

'static' in your original code makes all te variables global/shared. That means that if you'd create 500 Report objects with new, they all would have the same one ID, Data1 and Data2. Any change to any single of those 500 objects would cause all the objects to change. But it's be misleading, the objects would not change. They would simply have the same data. Looking at the "ID" field, I think you'd rather want a separate objects with separate data for separate records..