为什么(Int32)cmd.ExecuteScalar()赋值给Int32变量时提示转换无效?

本文介绍使用 C# 进行数据库数据检索并转换为整数的方法。首先通过 ExecuteScalar 方法获取数据,然后根据不同情况进行类型检查和转换,确保数据的有效性和准确性。

Int32.Parse(cmd.ExecuteScalar().ToString());   

object obj=cmd.ExecuteScalar();

if(obj==null||obj==DBNull.Value)

obj=0;

else if(obj.ToString()==string.empty|| obj.ToString()==null)

obj=0;

Convert.ToInt32(obj);

using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Data.SqlClient; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; namespace _2 { public partial class KnowledgeTree : Form { private string connectionString = "Data Source=localhost;Initial Catalog=学习笔记管理;Integrated Security=True;"; // 声明控件变量 private SplitContainer mainSplitContainer; private TreeView treeView; private TextBox txtName1; private TextBox txtSubject1; private RichTextBox txtContent1; private int currentPointId = -1; // 跟踪当前编辑的知识点ID public KnowledgeTree() { InitializeComponent(); InitializeUI(); // 添加初始化调用 LoadKnowledgeTree(); // 添加树加载 } // 初始化界面控件 private void InitializeUI() { { // 主分割容器 mainSplitContainer = new SplitContainer { Dock = DockStyle.Fill, SplitterDistance = 300 }; this.Controls.Add(mainSplitContainer); // 树视图 treeView = new TreeView { Dock = DockStyle.Fill, ImageList = CreateImageList(), ShowNodeToolTips = true }; mainSplitContainer.Panel1.Controls.Add(treeView); // 详情面板 Panel detailPanel = new Panel { Dock = DockStyle.Fill }; mainSplitContainer.Panel2.Controls.Add(detailPanel); // 详情控件 txtName1 = new TextBox { Location = new Point(10, 30), Width = 200 }; txtSubject1 = new TextBox { Location = new Point(10, 70), Width = 200 }; txtContent1 = new RichTextBox { Location = new Point(10, 110), Size = new Size(400, 200) }; btnSave = new Button { Text = "保存", Location = new Point(10, 320) }; btnSave.Click += SaveKnowledge; // 绑定保存事件 detailPanel.Controls.AddRange(new Control[] { new Label { Text = "名称", Location = new Point(10, 10) }, txtName1, new Label { Text = "学科", Location = new Point(10, 50) }, txtSubject, new Label { Text = "内容", Location = new Point(10, 90) }, txtContent1, btnSave }); } } private ImageList CreateImageList() { ImageList images = new ImageList(); images.ColorDepth = ColorDepth.Depth32Bit; images.ImageSize = new Size(24, 24); // 使用系统图标(实际应用中应使用自定义图标) images.Images.Add(SystemIcons.Information); // 0: 普通节点 images.Images.Add(SystemIcons.Warning); // 1: 重要节点 images.Images.Add(SystemIcons.Question); // 2: 问题节点 return images; } // 加载知识点树状图 private void LoadKnowledgeTree() { TreeView treeView1 = this.Controls[0] is SplitContainer sc ? (TreeView)sc.Panel1.Controls[0] : null; if (treeview == null) return; treeview.Nodes.Clear(); treeview.BeginUpdate(); try { // 获取所有知识点 DataTable points = GetKnowledgePoints(); // 创建节点字典 var nodeDict = new Dictionary<int, TreeNode>(); // 第一遍:创建所有节点 foreach (DataRow row in points.Rows) { int pid = Convert.ToInt32(row["Pid"]); string nodeText = $"{row["Pname"]} ({row["Stype"]})"; TreeNode node = new TreeNode(nodeText) { Name = pid.ToString(), Tag = row, // 存储整行数据 ToolTipText = row["Content"].ToString(), ImageIndex = GetNodeIconIndex(row["Stype"].ToString()) }; nodeDict.Add(pid, node); } // 第二遍:建立父子关系 foreach (DataRow row in points.Rows) { int pid = Convert.ToInt32(row["Pid"]); object parentObj = row["ParentId"]; if (parentObj != DBNull.Value) { int parentId = Convert.ToInt32(parentObj); if (nodeDict.ContainsKey(parentId)) nodeDict[parentId].Nodes.Add(nodeDict[pid]); } else { treeview.Nodes.Add(nodeDict[pid]); } } // 展开所有节点 treeview.ExpandAll(); // 添加节点选择事件 treeview.AfterSelect += (s, e) => DisplayPointDetails(e.Node); } catch (Exception ex) { MessageBox.Show($"加载树失败: {ex.Message}"); } finally { treeview.EndUpdate(); } } private int GetNodeIconIndex(string v) { throw new NotImplementedException(); } // 从数据库获取知识点 private DataTable GetKnowledgePoints() { using (SqlConnection conn = new SqlConnection(connectionString)) { conn.Open(); // 确保关系表存在 EnsureRelationsTableExists(conn); string sql = @"SELECT p.Pid, p.Pname, p.Stype, p.Content, r.ParentId FROM Point p LEFT JOIN Relations r ON p.Pid = r.ChildId"; using (var da = new SqlDataAdapter(sql, conn)) { var dt = new DataTable(); da.Fill(dt); return dt; } } } private void EnsureRelationsTableExists(SqlConnection conn) { string sql = @" IF NOT EXISTS (SELECT * FROM 学习笔记管理 WHERE name = 'Relations') BEGIN CREATE TABLE Relations ( RelationId INT PRIMARY KEY IDENTITY, ParentId INT, ChildId INT NOT NULL, CONSTRAINT FK_Child_Point FOREIGN KEY (ChildId) REFERENCES pointnote(Pid) ) END"; using (var cmd = new SqlCommand(sql, conn)) { cmd.ExecuteNonQuery(); } } private void label1_Click(object sender, EventArgs e) { } // 显示选中知识点的详情 private void DisplayPointDetails(TreeNode node) { if (node?.Tag == null) return; DataRow row = (DataRow)node.Tag; txtName1.Text = row["Pname"].ToString(); txtSubject1.Text = row["Stype"].ToString(); txtContent1.Text = row["Content"].ToString(); } private void SaveKnowledge(object sender, EventArgs e) { if (string.IsNullOrWhiteSpace(txtName.Text)) { MessageBox.Show("知识点名称不能为空"); return; } using (SqlConnection conn = new SqlConnection(connectionString)) { conn.Open(); string sql = @"INSERT INTO Relations (Pname, Stype, Content) VALUES (@name, @subject, @content); SELECT SCOPE_IDENTITY();"; using (var cmd = new SqlCommand(sql, conn)) { cmd.Parameters.AddWithValue("@name", txtName1.Text); cmd.Parameters.AddWithValue("@subject", txtSubject1.Text); cmd.Parameters.AddWithValue("@content", txtContent1.Text); try { int newId = Convert.ToInt32(cmd.ExecuteScalar()); MessageBox.Show($"保存成功! ID: {newId}"); LoadKnowledgeTree(); // 刷新树 } catch (Exception ex) { MessageBox.Show($"保存失败: {ex.Message}"); } } } } } }此代码运行提示:“学习管理笔记”无效怎么改?
最新发布
07-05
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

system1190

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值