Code Bye

求帮助,本人想用c#写一个签到系统,判断表字段能否存在,不存在则创建新字段,但是出现了一些问题

private void toolStripMenuItem2_Click(object sender, EventArgs e)
{
Form4 signForm = new Form4();
signForm.Show();
System.DateTime currentTime = new System.DateTime();
string tmp = currentTime.ToString(“d”);
string sql = “select count(*) from signTable where” + tmp + “=”” + tmp+”””;

SqlConnection lo_connAgain = new SqlConnection(“server=(local)\SQLEXPRESS;database=studentData;user id=sa;password=hanhe1254745721″);
lo_connAgain.Open();
if (!IsColExisted(lo_connAgain,”signTable”,sql))
{
creatColumn();
}
}
public void creatColumn()
{
//System.DateTime currentTime = new System.DateTime();
string tmp = DateTime.Now.ToString(“yyyy-MM-dd”);
string sql = “alter table signTable add ” + tmp + ” int default 0″;
MessageBox.Show(sql, sql, MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
SqlConnection lo_conn = new SqlConnection(“server=(local)\SQLEXPRESS;database=studentData;user id=sa;password=hanhe1254745721”);
lo_conn.Open();
SqlCommand lo_cmd = new SqlCommand();
lo_cmd.CommandText = sql;
lo_cmd.Connection = lo_conn;
lo_cmd.ExecuteNonQuery();
}
public static bool IsColExisted(SqlConnection conSource_, string strTableName_, string strColName_)
{
bool bExist = true;
try
{
string strExist = @”select count(*) from dbo.syscolumns where id=object_id(“” + strTableName_ + @””)” + @” and name=”” + strColName_ + @”””;
SqlCommand cmdExist = new SqlCommand(strExist, conSource_);
int nNum = (int)cmdExist.ExecuteScalar();
bExist = (0 != nNum);
}
catch
{
bExist = false;
}
return bExist;
}
在判断字段能否存在的时候总感觉不对,但是又不知道是哪里不对,而且在执行新建字段的sql命令的时候回出现一个语法错误,求高手帮忙解决

解决方案

10

1、单步调试下IsColExisted方法能否执行正常?
2、单步调试下,把新建字段的语句拿出来,单独去数据库执行,看报什么错?
3、为何不事先把表创建好呢,为毛要动态添加列呢?

10

sql 这样写:
if exists(select * from ……..) alert table add column ………
sql server 对于 exists 有特殊的优化,因此应该写 select * 查询,这样要比写上字段名更高效。

15

string tmp = DateTime.Now.ToString(“yyyy-MM-dd”);
string sql = “alter table signTable add ” + tmp + ” int default 0″;
显然 tmp 是形如 2016-09-04 这样的串
数据库是不允许有 数字开头 的字段名的,实在要用就得转义 mssql:[2016-09-04] mysql:`2016-09-04`
一年有 365 天,两年有 730 天…,像你这样每天一个字段,不超限吗?

5

假设 datatable 是 TB1
字段是 成绩
if (TB1.Columns.Contains(“成绩”))
本人第1次 感觉可能会答对一个问题~期待

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明求帮助,本人想用c#写一个签到系统,判断表字段能否存在,不存在则创建新字段,但是出现了一些问题