をコード
public class DBConnection
{
private DBConnection()
{
}
private string dbname = string.Empty;
public string DBName
{
get { return dbname;}
set { dbname = value;}
}
public string Password { get; set; }
private MySqlConnection mycon = null;
public MySqlConnection Connection
{
get { return mycon; }
}
private static DBConnection _instance = null;
public static DBConnection Instance()
{
if(_instance==null)
_instance=new DBConnection();
return _instance;
}
public bool IsConnect()
{
bool result = true;
if(mycon==null)
{
if (String.IsNullOrEmpty(dbname))
result = false;
string constr = string.Format("server=localhost;user id=root;password=mysql;database=pnys;",dbname);
mycon = new MySqlConnection(constr);
mycon.Open();
result = true;
}
return result;
}
public void Close()
{
mycon.Close();
}
}
protected void Page_Load(object sender, EventArgs e)
{
}
protected void Button1_Click1(object sender, EventArgs e)
{
MySqlDateTime fdate =new MySqlDateTime(DateTime.Parse(TextBox3.Text));
MySqlDateTime sdate = new MySqlDateTime(DateTime.Parse(TextBox4.Text));
var dbCon = DBConnection.Instance();
dbCon.DBName = "pnys";
if (dbCon.IsConnect())
{
string query = "INSERT INTO bondlocal (cancode,canname,bonddate) SELECT t_bondridapp.cancode,t_bondridapp.canname,t_bondridapp.debissuedate FROM t_bondridapp WHERE debissuedate>='" + fdate + "'AND debissuedate<='" + sdate + "'";
MySqlCommand cmd = new MySqlCommand(query, dbCon.Connection);
cmd.ExecuteNonQuery();
}
Server.Transfer("ReportBonds.aspx");
}
を使用しました基本的には、問題は、データベースにパラメータを渡している方法です。あなたはMySqlDateTime
を自分で作成する必要はありません - ちょうどパラメータ化SQLを使用して、それは問題ないはずです。
// TODO: Use a date/time control instead of parsing text to start with
DateTime fdate = DateTime.Parse(TextBox3.Text);
DateTime sdate = DateTime.Parse(TextBox4.Text);
string query = @"INSERT INTO bondlocal (cancode,canname,bonddate)
SELECT t_bondridapp.cancode,t_bondridapp.canname,t_bondridapp.debissuedate
FROM t_bondridapp
WHERE debissuedate >= @fdate AND debissuedate <= @sdate";
using (var command = new MySqlCommand(query, dbCon))
{
command.Parameters.Add("@fdate", MySqlDbType.Datetime).Value = fdate;
command.Parameters.Add("@sdate", MySqlDbType.Datetime).Value = sdate;
command.ExecuteNonQuery();
}
基本的に、あなただけの文字列連結を使用して、SQL内決して特定の値必要があります。パラメータ化されたSQLは、SQLインジェクション攻撃や変換の問題を防ぎ、コードの可読性を向上させます。それを作るために、接続プールに依存している - 余談として
(、私はあなたの現在の接続の共有を捨てるためにあなたを促す、と常に代わり作成し、新しいMySqlDbConnection
を開き、操作の終了時に、それを処分するでしょう効率的です。)
脇に、自動的に実装されたプロパティを調べる必要があります。あなたのコードは、機能の変更なしにはるかに短くて済みます。 –
あなたはそれを助けることができます..あなたは –
何を自動的に実装されたプロパティを使用してですか?彼らについての情報を見つけるために検索するだけで、明らかになるはずです。 –