0

C# ODBC を使用してデータベースにレコードを挿入する方法を理解しようとして、C# をいじっています。にレコードを読み込む方法を学びましたDGVが、今は挿入に行き詰まっています。私のコードが何をしているかの簡単な概要、テーブルから への 20 行の読み取りDGV、その後、同じ行を別のテーブルに挿入する必要があります。

VS 2012 と SQL Developer (Oracle) を使用しています。

私のフォームのコードは次のとおりです。

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace WindowsFormsApplication13
{
public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
    }

    private void button1_Click(object sender, EventArgs e)
    {
        for (int rows = 0; rows < 20; rows++)
        {
            dataGridView1.Rows.Add(); // adding needed amount of rows

            for (int cols = 0; cols < 13; cols++)
            {
                this.dataGridView1[cols, rows].Value = getNumberOfThreads(rows, cols);
            }
        }
        StringBuilder sql = new StringBuilder();

        sql.AppendLine("insert into chsarp_test_table");
        sql.AppendLine("SELECT *");
        sql.AppendLine("FROM legal_transactions");
        sql.AppendLine("WHERE rownum between 1 and 25");

        //using (DataTable dt = Database.GetData(sql.ToString()))
        //    if (dt.Rows.Count > 0)
        //  Database dt = new Database.SetData(sql.ToString());
        Database.SetData(sql.ToString());
    }

    public static string getNumberOfThreads(int i, int j)
    {

        StringBuilder sql = new StringBuilder();
        sql.AppendLine("SELECT *");
        sql.AppendLine("FROM legal_transactions");
        sql.AppendLine("WHERE rownum between 1 and 25");

        using (DataTable dt = Database.GetData(sql.ToString()))
            if (dt.Rows.Count > 0)
                return dt.Rows[i][j].Equals(DBNull.Value) ? "null" : dt.Rows[i][j].ToString();

        return "null";
    }
}

}

これが私のクラスのコードです:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Data.Odbc; //used for the ODBC stuff
using System.Data; // Used for public static datatable
using System.Windows.Forms;

namespace WindowsFormsApplication13
{
class Database
{

    private const string connOdbc = "dsn=atlas32;uid=NAME;pwd=XXXX";
    private const string cnnOLE = "provider =XXXX;User ID = NAME;password = XXXX; Data Source = XXX Properties=;Persist Security Info=False";

    public static DataTable GetData(string Sql)
    {
        DataTable dt = new DataTable();
        try
        {
            OdbcConnection cnn = GetConnection();
            using (OdbcDataAdapter da = new OdbcDataAdapter(Sql, cnn))
            {
                da.SelectCommand.CommandTimeout = 0;
                da.Fill(dt);
            }
            CloseConnection(cnn);
        }
        catch (Exception ex)
        {
            //Queries.LogErrors(ex.Message, Sql);
            MessageBox.Show("Error 1");

        }
        return dt;
    }

    public static void SetData(string sql)
    {

        try
        {
            OdbcConnection cnn = GetConnection();
            using (OdbcCommand cmd = new OdbcCommand(sql, cnn))
                cmd.ExecuteNonQuery();

            CloseConnection(cnn);
        }
        catch (Exception ex)
        {
            //Queries.LogErrors(ex.Message, sql);
            MessageBox.Show("Error 2");
        }

    }

    private static OdbcConnection GetConnection()
    {
        try
        {
            OdbcConnection cnn = new OdbcConnection() { ConnectionString = connOdbc };
            cnn.Open();
            return cnn;
        }
        catch (Exception ex)
        {
            //throw ex;
        }
        return null;
    }

    private static void CloseConnection(OdbcConnection Connection)
    {
        try
        {
            if (Connection.State == ConnectionState.Open)
                Connection.Close();
                Connection.Dispose();
        }
        catch (Exception ex)
        {
            //throw ex;
        }
        Connection = null;
    }

}

}

コードをステップ実行しようとしましたが、 でダウンしSetData MethodますExecuteNonQuery。私はこれを調べようとしましたが、私を助ける情報を気にすることはできませんでした.正しい方向へのプッシュは大歓迎です.

4

1 に答える 1

0

挿入していたテーブルにスキーマがありませんでした。質問のコメントセクションで@stuartdの助けを借りてこれを見つけました。

于 2013-10-29T14:38:33.963 に答える