为啥我将主键设置为文本(字符串)时无法检索数据
Posted
技术标签:
【中文标题】为啥我将主键设置为文本(字符串)时无法检索数据【英文标题】:why can't i retrieve data when i set primary key as text (string)为什么我将主键设置为文本(字符串)时无法检索数据 【发布时间】:2013-04-04 07:01:35 【问题描述】:namespace primarykeycheck
public partial class Form1 : Form
public Form1()
InitializeComponent();
OleDbConnection myConn;
OleDbCommand myComm;
string queryString;
public void connectDB()
myConn = new OleDbConnection(@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=D:\rummykhan\MCS\Spring 2013\Object Oriented Programming\My Apps\Testing\Database Apps\string as Primary key\primarykeycheck\db.accdb");
public string fetchName(string ID)
string Name;
queryString = "select dbName from mydb where dbID =" + ID;
myComm = new OleDbCommand(queryString, myConn);
myConn.Open();
Name = (string)(myComm.ExecuteScalar()).ToString();
myConn.Close();
return Name;
private void btn_fetch_Click(object sender, EventArgs e)
connectDB();
txtName.Text = fetchName(txtID.Text);
当 id 数据类型为字符串时,我正在努力获取名称,bt 我面临这个问题“标准表达式中的数据类型不匹配” 我也试过 名称 = (string)myComm.ExecuteScalar();
【问题讨论】:
【参考方案1】:你的陈述
queryString = "select dbName from mydb where dbID =" + ID;
有两个问题:
它不会在 SQL 命令中的 ID
值周围加上引号。
它正在尝试使用旧的和非常不赞成的方式来构建 SQL 命令。您确实应该调查“参数化查询”(在 Stack Overflow 上有 很多 示例)并熟悉 OleDbCommand
对象的 .Parameters
属性(参考:here)。
【讨论】:
以上是关于为啥我将主键设置为文本(字符串)时无法检索数据的主要内容,如果未能解决你的问题,请参考以下文章
mysql创建数据库时怎么将主键设置为UUID,建表语句怎么写
当主键为 varchar 时,无法从 Laravel 的 Eloquent 中检索列值
为啥当我将数字添加到字符串时,它会在 C++ 中显示随机文本?